Pagini recente » Cod sursa (job #2505733) | Cod sursa (job #1807310) | Cod sursa (job #2789674) | Cod sursa (job #2582886) | Cod sursa (job #2905446)
#include <fstream>
#include <cstring>;
using namespace std;
struct ura
{
int l,c;
};
ura coada[10003];
int dirL[8]={-1,-1,0,1,1,1,0,-1};
int dirC[8]={0,1,1,1,0,-1,-1,-1};
int rom[103][103],jul[103][103];
int main()
{
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,i,j,ir,jr,ij,jj,sf,inc,lin,col,minn=100000,k;
char y[103][103];
in>>n>>m;
for(i=0;i<=m+1;i++)
{
rom[0][i]=-1;
rom[n+1][i]=-1;
jul[0][i]=-1;
jul[n+1][i]=-1;
}
for(i=0;i<=m+1;i++)
{
rom[i][0]=-1;
rom[i][m+1]=-1;
jul[i][0]=-1;
jul[i][m+1]=-1;
}
in.get();
for(i=1;i<=n;i++)
{
in.get(y[i],101);
in.get();
}
for(i=1;i<=n;i++)
{
k=strlen(y[i]);
for(j=1;j<=k;j++)
{
if(y[i][j-1]=='R')
{
ir=i;
jr=j;
}
if(y[i][j-1]=='J')
{
ij=i;
jj=j;
}
if(y[i][j-1]=='X')
{
rom[i][j]=-1;
jul[i][j]=-1;
}
}
}
sf=inc=1;
coada[1].l=ir;
coada[1].c=jr;
rom[ir][jr]=1;
while(inc<=sf)
{
for(i=0;i<8;i++)
{
lin=coada[inc].l+dirL[i];
col=coada[inc].c+dirC[i];
if(rom[lin][col]==0)
{
sf++;
coada[sf].l=lin;
coada[sf].c=col;
rom[lin][col]=rom[coada[inc].l][coada[inc].c]+1;
}
}
inc++;
}
sf=inc=1;
coada[1].l=ij;
coada[1].c=jj;
jul[ij][jj]=1;
while(inc<=sf)
{
for(i=0;i<8;i++)
{
lin=coada[inc].l+dirL[i];
col=coada[inc].c+dirC[i];
if(jul[lin][col]==0)
{
sf++;
coada[sf].l=lin;
coada[sf].c=col;
jul[lin][col]=jul[coada[inc].l][coada[inc].c]+1;
}
}
inc++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(rom[i][j]==jul[i][j]&&rom[i][j]==minn&&rom[i][j]>0)
{
if(col>j)
{
col=j;
lin=i;
}
}
if(rom[i][j]==jul[i][j]&&rom[i][j]<minn&&rom[i][j]>0)
{
minn=rom[i][j];
lin=i;
col=j;
}
}
}
out<<minn<<" "<<lin<<" "<<col;
return 0;
}