Pagini recente » Cod sursa (job #2014679) | Istoria paginii utilizator/crisan_007 | Cod sursa (job #2034688) | Monitorul de evaluare | Cod sursa (job #1372145)
#include<iostream>
#include<fstream>
#include<string.h>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int i,n,m,j,y,x,xx,yy,xf,yf,a[105][105],b[105][105];
queue<int> Qx;
queue<int> Qy;
void lee(int a[105][105],int x,int y)
{
Qx.push(x);Qy.push(y);
while(Qx.empty()!=1)
{xx=Qx.front();yy=Qy.front();
if(a[xx-1][yy]==0||a[xx-1][yy]>a[xx][yy]+1){a[xx-1][yy]=a[xx][yy]+1;
Qx.push(xx-1);
Qy.push(yy);}
if(a[xx+1][yy]==0||a[xx+1][yy]>a[xx][yy]+1){a[xx+1][yy]=a[xx][yy]+1;
Qx.push(xx+1);
Qy.push(yy);}
if(a[xx][yy-1]==0||a[xx][yy-1]>a[xx][yy]+1){a[xx][yy-1]=a[xx][yy]+1;
Qx.push(xx);
Qy.push(yy-1);}
if(a[xx][yy+1]==0||a[xx][yy+1]>a[xx][yy]+1){a[xx][yy+1]=a[xx][yy]+1;
Qx.push(xx);
Qy.push(yy+1);}
Qx.pop();Qy.pop();
}
}
int main()
{
char *c;
c=new char[105];
f>>n>>m;
for(i=1;i<=n;i++)
{f.get();
f.get(c,105);
for(j=0;j<m;j++)
if(c[j]=='X'){a[i][j+1]=-1;b[i][j+1]=-1;}
else if(c[j]=='R'){x=i;y=j+1;}
else if(c[j]=='J'){xf=i;yf=j+1;}
delete(c);
}
for(i=0;i<=m+1;i++){a[0][i]=-1;
a[n+1][i]=-1;
b[0][i]=-1;
b[n+1][i]=-1;}
for(i=0;i<=n+1;i++){a[i][0]=-1;
a[i][m+1]=-1;
b[i][0]=-1;
b[i][m+1]=-1;}
lee(a,x,y);
a[x][y]=0;
lee(b,xf,yf);
b[xf][yf]=0;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)
if(b[i][j]>0&&b[i][j]==a[i][j]){g<<b[i][j]<<' '<<i<<' '<<j<<'\n';break;break;}
f.close();
g.close();
return 0;}