Cod sursa(job #386351)
/*
Nume:Temian Vlad
Problema:
Date:
*/
#include <stdio.h>
struct alee{
short x,y;
}coada[30004];
FILE *f,*o;
int a[102][102],sc,ic,b[102][102];
int main()
{
f=fopen("rj.in","r");
o=fopen("rj.out","w");
int n,x,y,m,i,j,e,r1,r2;
char linie[200];
fscanf(f,"%d %d\n",&n,&m);
a[0][0]=b[0][0]-1;a[n+1][0]=b[n+1][0]=-1;a[n+1][m+1]=b[n+1][m+1]=-1;a[0][m+1]=b[0][m+1]=-1;
for(i=1;i<=n;i++){
fgets(linie,114,f);
a[i][0]=b[i][0]=-1;
a[i][m+1]=b[i][m+1]=-1;
for(j=1;j<=m;j++){
if(a[0][j]!=-1&&a[n+1][j]!=-1){a[0][j]=b[0][j]=-1;a[n+1][j]=b[n+1][j]=-1;}
if(linie[j-1]=='X'){a[i][j]=b[i][j]=-1;}
else
if(linie[j-1]=='J'){
a[i][j]=1;ic++;coada[ic].x=i;coada[ic].y=j;
}
if(linie[j-1]=='R'){
b[i][j]=1;r1=i;r2=j;
}
}
}
sc=ic;ic=1;
while(ic<=sc){
x=coada[ic].x;
y=coada[ic].y;
if(a[x][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y+1;a[x][y+1]=a[x][y]+1;}
if(a[x][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y-1;a[x][y-1]=a[x][y]+1;}
if(a[x+1][y]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y;a[x+1][y]=a[x][y]+1;}
if(a[x-1][y]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y;a[x-1][y]=a[x][y]+1;}
if(a[x+1][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y+1;a[x+1][y+1]=a[x][y]+1;}
if(a[x-1][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y-1;a[x-1][y-1]=a[x][y]+1;}
if(a[x+1][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y-1;a[x+1][y-1]=a[x][y]+1;}
if(a[x-1][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y+1;a[x-1][y+1]=a[x][y]+1;}
ic++;
}
ic=sc=1;
coada[ic].x=r1;
coada[ic].y=r2;
while(ic<=sc){
x=coada[ic].x;
y=coada[ic].y;
if(b[x][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y+1;b[x][y+1]=b[x][y]+1;}
if(b[x][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y-1;b[x][y-1]=b[x][y]+1;}
if(b[x+1][y]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y;b[x+1][y]=b[x][y]+1;}
if(b[x-1][y]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y;b[x-1][y]=b[x][y]+1;}
if(b[x+1][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y+1;b[x+1][y+1]=b[x][y]+1;}
if(b[x-1][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y-1;b[x-1][y-1]=b[x][y]+1;}
if(b[x+1][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y-1;b[x+1][y-1]=b[x][y]+1;}
if(b[x-1][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y+1;b[x-1][y+1]=b[x][y]+1;}
ic++;
}
ic=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
if((a[i][j]!=-1&&a[i][j]!=0) && a[i][j]==b[i][j]){ic=1;fprintf(o,"%d %d %d",a[i][j],i,j);break;}
if(ic)break;
}
/*for(i=0;i<=n+1;i++){
for(j=0;j<=m+1;j++)fprintf(o,"%d ",a[i][j]);fprintf(o,"\n");} */
return 0;
}