Pagini recente » Cod sursa (job #2462257) | Cod sursa (job #973585) | Cod sursa (job #1225449) | Cod sursa (job #1950723) | Cod sursa (job #2127429)
#include <fstream>
#include <queue>
#include <iostream>
#include <cstring>
using namespace std;
ifstream input("rj.in");
ofstream print("rj.out");
const int nrmax=102;
char s[nrmax];
int A[nrmax][nrmax];
int matLee1[nrmax][nrmax];
int matLee2[nrmax][nrmax];
int di[]={0,1,-1,0,1,-1,1,-1};
int dj[]={1,0,0,-1,1,-1,-1,1};
int i,j,n,m,x1,x2,y1,y2,ii,jj;
queue< pair<int,int> >coada;
void citire()
{
input>>n>>m;
for(i=1;i<=n;i++){
input.get();
input.get(s,101);
for (j=1;j<=m;j++) {
if (s[j-1]==' ') A[i][j]=0;
if (s[j-1]=='X') A[i][j]=-1;
if (s[j-1]=='R'){A[i][j]=1;
x1=i,y1=j;}
if (s[j-1]=='J'){A[i][j]=1;
x2=i,y2=j;}
}
}
}
bool valid (int x,int y)
{
if(x<1 || y<1 || x>n ||y>m)return false;
if(A[x][y]==-1)return false;
return true;
}
void Lee(int x1,int y1, int matLee[nrmax][nrmax])
{
matLee[x1][y1]=1;
coada.push(make_pair(x1,y1));
while(!coada.empty())
{
int x=coada.front().first;
int y=coada.front().second;
coada.pop();
for(int h=0;h<8;h++){
int ox=di[h]+x;
int oy=dj[h]+y;
if(valid(ox,oy)&&matLee[ox][oy]<1){
matLee[ox][oy]=matLee[x][y]+1;
coada.push(make_pair(ox,oy));
}
}
}
}
int main()
{citire();
Lee(x1,y1,matLee1);
Lee(x2,y2,matLee2);
int minim=(n*m)+2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if(matLee1[i][j]==matLee2[i][j]&&matLee1[i][j]<minim&&matLee1[i][j]>0){minim=matLee1[i][j];
ii=i;
jj=j;}
}
print<<minim<<" "<<ii<<" "<<jj;
return 0;
}