Pagini recente » Cod sursa (job #2132541) | Cod sursa (job #1296187) | Cod sursa (job #1635235) | Cod sursa (job #1618138) | Cod sursa (job #489035)
Cod sursa(job #489035)
#include <stdio.h>
char ch;
int a[150][150], b[150][150];
int m, n, i, j, k;
int primulr = 1, primulj = 1;
int nrx, nry;
int Min = 100000, l1, c1;
int dx[] = {0, -1, -1, 0, 1, 1, 1, 0, -1};
int dy[] = {0 ,0, 1, 1, 1, 0, -1, -1,-1};
struct coada
{
int x;
int y;
};
struct coada cr[100001], cj[100001];
int main ()
{
FILE *f = fopen ("rj.in","r");
FILE *g = fopen ("rj.out","w");
fscanf (f,"%d %d",&m, &n);
for (i=0; i<=n+1; ++i)
a[0][i] = a[m+1][i] = b[0][i] = b[m+1][i] = -2;
for (i=0; i<=m+1; ++i)
a[i][0] = a[n+1][i] = b[i][0] = a[n+1][i] = -2;
for (i=1; i<=m; ++i)
{
fscanf (f,"%c", &ch);
for (j=1; j<=n; ++j)
{
fscanf (f,"%c", &ch);
if (ch == ' ')
a[i][j] = b[i][j] = -1;
else
if (ch == 'X')
a[i][j] = b[i][j] = -2;
else
if (ch == 'R')
{
a[i][j] = 0;
b[i][j] = -1;
cr[1].x = i;
cr[1].y = j;
}
else
if (ch == 'J')
{
b[i][j] = 0;
a[i][j] = -1;
cj[1].x = i;
cj[1].y = j;
}
}
}
i = k = 1;
while (primulr <= i)
{
for (j=1; j<=8; ++j)
{
nrx = cr[primulr].x + dx[j];
nry = cr[primulr].y + dy[j];
if (a[nrx][nry] == -1)
{
a[nrx][nry] = a[cr[primulr].x][cr[primulr].y] + 1;
i ++;
cr[i].x = nrx;
cr[i].y = nry;
}
}
primulr ++;
}
while (primulj <= k)
{
for (j=1; j<=8; ++j)
{
nrx = cj[primulj].x + dx[j];
nry = cj[primulj].y + dy[j];
if (b[nrx][nry] == -1)
{
b[nrx][nry] = b[cj[primulj].x][cj[primulj].y] + 1;
k ++;
cj[k].x = nrx;
cj[k].y = nry;
}
}
primulj ++;
}
for (i=1; i<=m; ++i)
for (j=1; j<=n; ++j)
if (a[i][j] == b[i][j] && a[i][j] > 0)
{
if (Min > a[i][j])
{
Min = a[i][j];
l1 = i;
c1 = j;
}
}
fprintf (g,"%d %d %d", Min + 1, l1, c1);
fclose(g);
fclose(f);
return 0;
}