Pagini recente » Monitorul de evaluare | Cod sursa (job #2015837) | Cod sursa (job #497331) | Cod sursa (job #894619) | Cod sursa (job #1304150)
#include<stdio.h>
#define NMAX 105
#define inf 1<<30
using namespace std;
struct poz{
int x,y;
};
int r[NMAX][NMAX],j[NMAX][NMAX];
poz q[NMAX*NMAX];
char s[NMAX];
void bordare(int n,int m){
for(int i=0;i<=m+1;++i)
r[i][0]=j[i][0]=r[i][n+1]=j[i][n+1]=-1;
for(int i=0;i<=n+1;++i)
r[0][i]=j[0][i]=r[m+1][i]=j[m+1][i]=-1;
}
void lee(int x,int y,int mat[NMAX][NMAX]){
int st,fin;
int dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1};
poz p;
st=fin=1;
while(st<=fin){
p.x=q[st].x;
p.y=q[st].y;
++st;
for(int k=0;k<=7;++k)
if(mat[p.x+dl[k]][p.y+dc[k]]==0){
mat[p.x+dl[k]][p.y+dc[k]]=mat[p.x][p.y]+1;
++fin;
q[fin].x=p.x+dl[k];
q[fin].y=p.y+dc[k];
}
}
}
int main(){
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
int n,m,min=inf,minx,miny;
char c;
poz pr,pj;
scanf("%d %d%c",&m,&n,&c);
bordare(n,m);
for(int i=1;i<=m;++i){
gets(s);
for(int k=0;k<n;++k){
if(s[k]==' ') r[i][k+1]=j[i][k+1]=0;
else if(s[k]=='X') r[i][k+1]=j[i][k+1]=-1;
else if(s[k]=='R') {
r[i][k+1]=j[i][k+1]=0;
pr.x=i;
pr.y=k+1;
}
else if(s[k]=='J') {
r[i][k+1]=j[i][k+1]=0;
pj.x=i;
pj.y=k+1;
}
else r[i][k]=j[i][k+1]=0;
}
}
q[1].x=pr.x;
q[1].y=pr.y;
r[pr.x][pr.y]=1;
lee(pr.x,pr.y,r);
q[1].x=pj.x;
q[1].y=pj.y;
j[pj.x][pj.y]=1;
lee(pj.x,pj.y,j);
for(int i=m;i>=1;--i)
for(int k=n;k>=1;--k)
if(r[i][k]==j[i][k] && r[i][k]>0 && r[i][k]<min){
min=r[i][k];
minx=i;
miny=k;
}
printf("%d %d %d\n",min,minx,miny);
return 0;
}