Pagini recente » Cod sursa (job #748299) | Cod sursa (job #3144213) | Cod sursa (job #2668579) | Cod sursa (job #3182401) | Cod sursa (job #2126760)
#include <fstream>
#include <queue>
using namespace std;
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
queue<pair<int,int> >qr,qj;
char c[101];
int ro[101][101],ju[101][101],n,m,x,y,drum=1000000;
ifstream fi("rj.in");
ofstream fo("rj.out");
void romeo(){
int i,j,d,ii,jj;
while(!qr.empty()){
i=qr.front().first;
j=qr.front().second;
qr.pop();
for(d=0;d<8;d++){
ii=i+dir[d][0];
jj=j+dir[d][1];
if(ii>=1 and ii<=n and jj>=1 and jj<=m and ro[ii][jj]==0){
ro[ii][jj]=ro[i][j]+1;
qr.push(make_pair(ii,jj));
}
}
}
}
void julieta(){
int i,j,d,ii,jj;
while(!qj.empty()){
i=qj.front().first;
j=qj.front().second;
qj.pop();
for(d=0;d<8;d++){
ii=i+dir[d][0];
jj=j+dir[d][1];
if(ii>=1 and ii<=n and jj>=1 and jj<=m and ju[ii][jj]==0){
ju[ii][jj]=ju[i][j]+1;
qj.push(make_pair(ii,jj));
}
}
}
}
int main()
{
fi>>n>>m;fi.getline(c,101);
for(int i=1;i<=n;i++) {fi.getline(c,101);
for(int j=0;j<m;j++){
if(c[j]==' ') {ro[i][j+1]=0;ju[i][j+1]=0;}
if(c[j]=='X') {ro[i][j+1]=-1;ju[i][j+1]=-1;}
if(c[j]=='R') {ro[i][j+1]=1;qr.push(make_pair(i,j+1));}
if(c[j]=='J') {ju[i][j+1]=1;qj.push(make_pair(i,j+1));}
}}
romeo();
julieta();
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
if(ro[i][j]==ju[i][j] and ro[i][j]!=0 and ro[i][j]!=-1)
if(ro[i][j]<drum) {drum=ro[i][j];x=i;y=j;}
fo<<drum<<" "<<x<<" "<<y;
fi.close();
fo.close();
return 0;
}