Pagini recente » Cod sursa (job #2724783) | Cod sursa (job #1613220) | Cod sursa (job #647704) | Cod sursa (job #1867077) | Cod sursa (job #2504888)
#include <fstream>
#include <cstdio>
using namespace std;
ofstream cout("rj.out");
char a[102][102];
int ro[101][101],ju[101][101];
struct ura{
int x,y;
};
ura coada[10];
short int dir1[]={-1,-1,0,1,1,1,0,-1};
short int dir2[]={0,1,1,1,0,-1,-1,-1};
int main()
{
freopen("rj.in","r",stdin);
int n,m,xx,yy,i,j,inc,sf,xr,yr,xj,yj,mini=-1,minx,miny;
scanf("%d %d\n",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
{
a[i][j]=getchar();
if(a[i][j]=='\n')
{
while(j<=m)
{
a[i][j]=' ';
j++;
}
j=m+5;
}
if(a[i][j]=='R')
{
xr=i;
yr=j;
}
else
if(a[i][j]=='J')
{
xj=i;
yj=j;
}
}
if(j<m+5)
getchar();
}
for(i=0;i<=n+1;i++)
a[i][0]=a[i][m+1]='X';
for(j=0;j<=m+1;j++)
a[0][j]=a[n+1][j]='X';
inc=sf=1;
coada[inc].x=xr;
coada[inc].y=yr;
while(inc<=sf)
{
xx=coada[inc].x;
yy=coada[inc].y;
for(i=0;i<8;i++)
{
if(a[xx+dir1[i]][yy+dir2[i]]==' ')
if(ro[xx][yy]+1<ro[xx+dir1[i]][yy+dir2[i]] || ro[xx+dir1[i]][yy+dir2[i]]==0)
{
ro[xx+dir1[i]][yy+dir2[i]]=ro[xx][yy]+1;
sf++;
coada[sf].x=xx+dir1[i];
coada[sf].y=yy+dir2[i];
}
}
inc++;
}
inc=sf=1;
coada[inc].x=xj;
coada[inc].y=yj;
while(inc<=sf)
{
xx=coada[inc].x;
yy=coada[inc].y;
for(i=0;i<8;i++)
{
if(a[xx+dir1[i]][yy+dir2[i]]==' ')
if(ju[xx][yy]+1<ju[xx+dir1[i]][yy+dir2[i]] ||ju[xx+dir1[i]][yy+dir2[i]]==0)
{
ju[xx+dir1[i]][yy+dir2[i]]=ju[xx][yy]+1;
sf++;
coada[sf].x=xx+dir1[i];
coada[sf].y=yy+dir2[i];
}
}
inc++;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(ro[i][j]==ju[i][j] && ro[i][j]!=0 && (ro[i][j]<mini || mini==-1))
{
mini=ro[i][j];
minx=i;
miny=j;
}
}
cout<<mini+1<<" "<<minx<<" "<<miny;
return 0;
}