Pagini recente » Cod sursa (job #924032) | Cod sursa (job #993639) | Cod sursa (job #3144567) | Cod sursa (job #638742) | Cod sursa (job #1060710)
#include <cstdio>
#include <algorithm>
#define INF 2000000000
using namespace std;
int dx[] = {0, 0, 1, -1, 1, -1, 1, -1}, rr[128][128], jj[128][128];
int dy[] = {1, -1, 0, 0, 1, -1, -1, 1};
int main ()
{
freopen ("rj.in", "r", stdin);
freopen ("rj.out", "w", stdout);
int n, m;
scanf ("%d %d\n", &n, &m);
for (int i = 1; i <= n; i++)
{
char c;
for (int j = 1; j <= m; j++)
{
scanf ("%c", &c);
if (c == 'X') rr[i][j] = jj[i][j] = -1;
else if (c == ' ') rr[i][j] = jj[i][j] = INF;
else if (c == 'R') rr[i][j] = 1, jj[i][j] = INF;
else if (c == 'J') jj[i][j] = 1, rr[i][j] = INF;
}
scanf ("%c", &c);
}
for (int i = 0; i <= n + 1; i++)
rr[i][0] = jj[i][0] = rr[i][m + 1] = jj[i][m + 1] = -1;
for (int i = 0; i <= m + 1; i++)
rr[0][i] = jj[0][i] = rr[n + 1][i] = jj[n + 1][i] = -1;
bool OK = true;
for (int h = 1; OK; h++)
{
OK = false;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
if (rr[i][j] == h)
{
for (int k = 0; k < 8; k++)
rr[dx[k] + i][dy[k] + j] = min (h + 1, rr[dx[k] + i][dy[k] + j]);
OK = true;
}
}
}
OK = true;
for (int h = 1; OK; h++)
{
OK = false;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
if (jj[i][j] == h)
{
for (int k = 0; k < 8; k++)
jj[dx[k] + i][dy[k] + j] = min (h + 1, jj[dx[k] + i][dy[k] + j]);
OK = true;
}
}
}
int mi = INF, x, y;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (rr[i][j] == jj[i][j] && rr[i][j] > 0 && mi > rr[i][j]) mi = rr[i][j], x = i, y = j;
/*for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
printf ("%d ", rr[i][j]);
printf ("\n");
}
printf ("\n");
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
printf ("%d ", jj[i][j]);
printf ("\n");
}*/
printf ("%d ", mi);
printf ("%d ", x);
printf ("%d\n", y);
return 0;
}