Pagini recente » Cod sursa (job #2811068) | Cod sursa (job #267748) | Ciorna | Cod sursa (job #3193798) | Cod sursa (job #1753391)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short i,j,n,m,xr,xj,yr,yj;
char A[105][105];
short R[105][105],J[105][105];
short d1[9]= {0,1,-1,1,-1,0,1,-1,0};
short d2[9]= {0,1,-1,-1,1,1,0,0,-1};
typedef struct coada
{
short l;
short c;
} COADA;
queue <COADA> Q;
coada x,y;
void lee(short s1,short s2,short P[105][105])
{
x.l=s1;
x.c=s2;
Q.push(x);
P[s1][s2]=1;
while (!Q.empty())
{
x.l=Q.front().l;
x.c=Q.front().c;
Q.pop();
for (int k=1; k<=8; k++)
{
y.l=x.l+d1[k];
y.c=x.c+d2[k];
if (P[y.l][y.c]==0 && A[y.l][y.c]!='X')
{
P[y.l][y.c]=P[x.l][x.c]+1;
Q.push(y);
}
}
}
}
int main()
{
fin>>n>>m;
fin.get();
for (i=1; i<=n; i++)
{
fin.getline(A[i]+1,105);
for (j=1; j<=m; j++)
{
if (A[i][j]=='R')
{
xr=i;
yr=j;
}
else if (A[i][j]=='J')
{
xj=i;
yj=j;
}
// if ((short)A[i][j]==0)
// A[i][j]=(char)32;
}
}
for (i=0; i<=n+1; i++)
A[i][0]=A[i][n+1]='X';
for (i=0; i<=m+1; i++)
A[0][i]=A[m+1][i]='X';
lee(xr,yr,R);
lee(xj,yj,J);
short mini=32000;
short k1,k2;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
if (R[i][j]==J[i][j] && R[i][j]<mini && R[i][j]!=0)
{
mini=R[i][j];
k1=i;
k2=j;
}
}
fout<<mini<<' '<<k1<<' '<<k2<<"\n";
return 0;
}