Pagini recente » Cod sursa (job #2515700) | Cod sursa (job #1250297) | Cod sursa (job #1049817) | Cod sursa (job #1116108) | Cod sursa (job #291677)
Cod sursa(job #291677)
#include<stdio.h>
#define IN "rj.in","r",stdin
#define OUT "rj.out","w",stdout
struct pct {
int x,y;
};
const int dx[8]={1,-1,0,0,-1,-1,1,1};
const int dy[8]={0,0,-1,1,-1,1,-1,1};
pct coada[10020];
int m,n,xR,yR,xJ,yJ,pozx,pozy;
int a[120][120];
void citire()
{
freopen(IN);
scanf("%d%d\n",&n,&m);
char c[120];
for(int i = 1; i <= n ; ++i)
{
fgets(c,120,stdin);
for(int j = 0 ;j < m; ++j)
{
if(c[j] == 'R' || c[j] == 'J')
{
if(c[j] == 'R')
{
xR=i;
yR=j+1;
}
else
{
xJ=i;
yJ=j+1;
}
a[i][j+1] = 0;
continue;
}
if(c[j] == 'X')
{
a[i][j+1] = -1;
continue;
}
else if(c[j] == ' ')
{
a[i][j+1] = -3;
continue;
}
}
}
}
void Lee1()
{
int i,k,T=1,sx,sy;
coada[T].x = xR;
coada[T++].y = yR;
for(i = 1 ; i <= T ; ++i)
for(k = 0 ; k < 8 ; ++k)
{
sx = dx[k] + coada[i].x;
sy = dy[k] + coada[i].y;
if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && a[sx][sy] == -3 && !(a[sx][sy] == 0 || a[sx][sy] == -1))
{
coada[T].x = sx;
coada[T++].y = sy;
a[sx][sy] = a[coada[i].x][coada[i].y] + 1;
}
}
for(int i=1;i<=T;++i)
{
coada[i].x=0;
coada[i].y=0;
}
}
void Lee2()
{
int i,k,T=1,sx,sy;
int min=20000;
coada[T].x = xJ;
coada[T++].y = yJ;
for(i = 1 ; i <= T ; ++i)
for(k = 0 ; k < 8 ; ++k)
{
sx = dx[k] + coada[i].x;
sy = dy[k] + coada[i].y;
if(a[coada[i].x][coada[i].y] + 1 == a[sx][sy] && a[sx][sy] < min)
{
pozx=sx;
pozy=sy;
}
else if(a[sx][sy] == min && pozx > sx)
{
pozx=sx;
pozy=sy;
}
else if(a[sx][sy] == min && pozy > sy && pozx == sx)
{
pozx=sx;
pozy=sy;
}
if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && a[coada[i].x][coada[i].y] + 1 < a[sx][sy] && !(a[sx][sy] == 0 || a[sx][sy] == -1))
{
coada[T].x = sx;
coada[T++].y = sy;
a[sx][sy] = a[coada[i].x][coada[i].y] + 1;
}
}
}
void afisare()
{
freopen(OUT);
printf("%d %d %d \n",a[pozx][pozy] + 1,pozx,pozy);
}
int main()
{
citire();
Lee1();
Lee2();
afisare();
return 0;
}