Pagini recente » Cod sursa (job #3296437) | Cod sursa (job #329643) | Cod sursa (job #2719344) | Cod sursa (job #3276052) | Cod sursa (job #1519384)
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
int N,M,R[110][110],J[110][110],i,j,rx,ry,jx,jy,smin=10001,fx,fy;
const int dirx[]={-1,-1,0,1,1,1,0,-1},diry[]={0,1,1,1,0,-1,-1,-1};
char rand0[110],c;
ifstream f("rj.in");
ofstream g("rj.out");
queue<int> Qx,Qy;
int main()
{
f>>N>>M;
for(i=1;i<=N;i++)
{
f>>rand0[0];
f.getline(rand0+1,110);
for(j=0;j<M;j++)
{
if(rand0[j]=='R')
{
rx=i;
ry=j+1;
}
else if(rand0[j]=='J')
{
jx=i;
jy=j+1;
}
else if(rand0[j]=='X')
{
R[i][j+1]=J[i][j+1]=-1;
}
}
}
for(i=0;i<=N+1;i++)
{
R[i][0]=R[i][N+1]=-1;
J[i][0]=J[i][N+1]=-1;
}
for(i=0;i<=M+1;i++)
{
R[0][i]=R[M+1][i]=-1;
J[0][i]=J[M+1][i]=-1;
}
Qx.push(rx);
Qy.push(ry);
R[rx][ry]=1;
J[jx][jy]=1;
while(!Qx.empty())
{
int x=Qx.front();
int y=Qy.front();
Qx.pop();
Qy.pop();
for(i=0;i<=7;i++)
{
if(R[x+dirx[i]][y+diry[i]]==0)
{
R[x+dirx[i]][y+diry[i]]=R[x][y]+1;
Qx.push(x+dirx[i]);
Qy.push(y+diry[i]);
}
}
}
Qx.push(jx);
Qy.push(jy);
while(!Qx.empty())
{
int x=Qx.front();
int y=Qy.front();
Qx.pop();
Qy.pop();
for(i=0;i<=7;i++)
{
if(J[x+dirx[i]][y+diry[i]]==0)
{
J[x+dirx[i]][y+diry[i]]=J[x][y]+1;
Qx.push(x+dirx[i]);
Qy.push(y+diry[i]);
}
}
}
for(i=1;i<=N;i++)
{
for(j=1;j<=M;j++)
{
if(R[i][j]==J[i][j]&&R[i][j]>0)
{
if(smin>R[i][j])
{
smin=R[i][j];
fx=i;
fy=j;
}
else if(smin==R[i][j]&&fy>j)
{
fx=i;
fy=j;
}
}
}
}
g<<smin<<" "<<fx<<" "<<fy;
return 0;
}