Pagini recente » Cod sursa (job #1277264) | Cod sursa (job #2875568) | Cod sursa (job #2414981) | Cod sursa (job #241199) | Cod sursa (job #2353368)
#include <cstdio>
#include <queue>
#define MAX 0xffffff
using namespace std;
int mat[102][102], n, m;
void af()
{
int i, j;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
if (mat[i][j] == -1) {printf ("X ");}
else {printf ("%d ", (mat[i][j] == MAX) ? 0 : mat[i][j]);}
}
printf ("\n");
}
printf ("\n");
}
int main()
{
freopen ("rj.in", "r", stdin);
freopen ("rj.out", "w", stdout);
int i, j, k, rx, ry, rb = 0, jx, jy, jb = 0;
const int ii[8] = {-1,-1,-1, 0, 0, 1, 1, 1};
const int jj[8] = {-1, 0, 1,-1, 1,-1, 0, 1};
queue <pair <int, int> > q;
char s[103];
scanf ("%d%d", &n, &m);
if (n > 100 || m > 100)
{
printf ("TO BIGGGGG");
return 0;
}
getchar();
for (i = 1; i <= n; ++i)
{
fgets (s, 102, stdin);
for (j = 1; j <= m; ++j)
{
switch (s[j-1])
{
case 'X':
mat[i][j] = -1;
break;
case ' ':
mat[i][j] = MAX;
break;
case '\n':
for ( ; j <= m; ++j)
{
mat[i][j] = MAX;
}
++j;
break;
case 'R':
mat[i][j] = 1;
rx = i;
ry = j;
++rb;
break;
case 'J':
mat[i][j] = MAX;
jx = i;
jy = j;
++jb;
break;
case -1:
for ( ; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
mat[i][j] = MAX;
}
}
break;
default:
printf ("WTF!! I don't know...");
return 0;
}
}
if (j == m + 1) {getchar();}
}
if (rb != 1 || jb != 1)
{
printf ("Wait... What??");
return 0;
}
q.push (pair <int,int> (rx, ry));
while (!q.empty())
{
i = q.front().first;
j = q.front().second;
q.pop();
for (k = 0; k < 8; ++k)
{
if (mat[i+ii[k]][j+jj[k]] == MAX)
{
mat[i+ii[k]][j+jj[k]] = mat[i][j] + 1;
if (1 || i+ii[k] != jx || j+jj[k] != jy)
{
q.push (pair <int, int> (i+ii[k], j+jj[k]));
}
else
{
while (!q.empty()) {q.pop();}
}
}
}
}
if (mat[jx][jy] == MAX)
{
printf ("YOU IDIOT");
return 0;
}
int nr = (mat[jx][jy] + 1) / 2, cnr;
cnr = nr;
while (--cnr)
{
for (k = 0; k < 8; ++k)
{
if (mat[jx+ii[k]][jy+jj[k]] + 1 == mat[jx][jy])
{
jx += ii[k];
jy += jj[k];
break;
}
}
}
printf ("%d %d %d", nr, jx, jy);
return 0;
}