Pagini recente » Istoria paginii runda/pre2/clasament | Cod sursa (job #2765744) | Cod sursa (job #1363591) | Cod sursa (job #752779) | Cod sursa (job #1554554)
#include <iostream>
#include <fstream>
#define nmax 105
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[]={0,1,0,-1,1,-1,1,-1};
int dy[]={1,0,-1,0,1,1,-1,-1};
int ro[nmax][nmax],ju[nmax][nmax];
int qx[nmax*nmax],qy[nmax*nmax];
int main()
{int n,m,i,j,in,sf,rx,ry,jx,jy,px,py,pux,puy;
char s[nmax];
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{fin.getline(s,nmax);
for(j=1;j<=m;j++)
if(s[j-1]=='X'){ro[i][j]=-1;ju[i][j]=-1;}
else if(s[j-1]=='R'){rx=i;ry=j;}
else if(s[j-1]=='J'){jx=i;jy=j;}
}
for(i=0;i<=n+1;i++)
ro[i][0]=ro[i][m+1]=ju[i][0]=ju[i][m+1]=-1;
for(i=0;i<=m+1;i++)
ro[0][i]=ro[n+1][i]=ju[0][i]=ju[n+1][i]=-1;
in=sf=0;
ro[rx][ry]=1;
qx[in]=rx;qy[in]=ry;
while(in<=sf)
{pux=qx[in];puy=qy[in++];
for(i=0;i<8;i++)
{px=pux+dx[i];py=puy+dy[i];
if(!ro[px][py])
{ro[px][py]=1+ro[pux][puy];
qx[++sf]=px; qy[sf]=py;}
}
}
in=sf=0;
ju[jx][jy]=1;
qx[in]=jx;qy[in]=jy;
while(in<=sf)
{pux=qx[in];puy=qy[in++];
for(i=0;i<8;i++)
{px=pux+dx[i];py=puy+dy[i];
if(!ju[px][py])
{ju[px][py]=1+ju[pux][puy];
qx[++sf]=px; qy[sf]=py;}
}
}
int minim =5555;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(ro[i][j]>0 && ro[i][j]==ju[i][j] && ro[i][j]<minim){minim=ro[i][j];rx=i;ry=j;}
fout<<minim<<' '<<rx<<' '<<ry;
}