Pagini recente » Cod sursa (job #2583383) | Cod sursa (job #3030051) | Cod sursa (job #1738000) | Cod sursa (job #866952) | Cod sursa (job #1589641)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct coada
{
short int l,c;
} C[110*110],p,v,pr,pj;
short int MR[110][110],MJ[110][110];
char car;
short int i,j,k,n,m,prim,ultim;
short int dl[]={-1,0,1,0,-1,-1,1,1}, dc[]={0,-1,0,1,-1,1,-1,1};
bool ajuns,gasit;
int main()
{
fin>>n>>m;
fin.get();
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
fin.get(car);
if(car=='\n') break;
if(car=='R')
{
pr.l=i;
pr.c=j;
}
if(car=='J')
{
pj.l=i;
pj.c=j;
}
if(car=='X')
MR[i][j]=MJ[i][j]=-1;
}
if(car!='\n')
fin.get();
}
for(i=0; i<=n+1; i++)
MR[i][0]=MR[i][m+1]=MJ[i][0]=MJ[i][m+1]=-1;
for(j=0; j<=m+1; j++)
MR[0][j]=MR[n+1][j]=MJ[0][j]=MJ[n+1][j]=-1;
C[prim]=pr;
while(prim<=ultim)
{
p=C[prim++];
for(k=0;k<8;k++)
{
v.l=p.l+dl[k];
v.c=p.c+dc[k];
if(MR[v.l][v.c]==0)
{
MR[v.l][v.c]=MR[p.l][p.c]+1;
if(v.l==pj.l && v.c==pj.c)
{
ajuns=true;
break;
}
C[++ultim]=v;
}
}
if(ajuns==true)
break;
}
ajuns=false;
prim=ultim=0;
C[prim]=pj;
while(prim<=ultim)
{
p=C[prim++];
for(k=0;k<8;k++)
{
v.l=p.l+dl[k];
v.c=p.c+dc[k];
if(MJ[v.l][v.c]==0)
{
MJ[v.l][v.c]=MJ[p.l][p.c]+1;
if(v.l==pr.l && v.c==pr.c)
{
ajuns=true;
break;
}
C[++ultim]=v;
}
}
if(ajuns==true)
break;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(MR[i][j]==MJ[i][j] && MR[i][j]>0)
{
fout<<MR[i][j]+1<<' '<<i<<' '<<j;
gasit=true;
break;
}
}
if(gasit)
break;
}
return 0;
}