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