Pagini recente » Cod sursa (job #1105362) | Cod sursa (job #701921) | Cod sursa (job #576863) | Cod sursa (job #1280555) | Cod sursa (job #2534529)
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
const int nmax=105;
const int di[]={0,1,1,1,0,-1,-1,-1};
const int dj[]={1,1,0,-1,-1,-1,0,1};
int M[nmax][nmax],R[nmax][nmax],J[nmax][nmax];
char s[nmax];
int n,m,startRx,startRy,startJx,startJy;
queue < pair <int, int> >coada;
queue < pair <int, int> >coada2;
void citire()
{
fin>>n>>m;
for(int i=1;i<=n;i++){
fin.getline(s,nmax);
for(int j=0;j<m;j++){
if(s[j]==' ')
M[i][j]=0;
else if(s[j]=='X')
M[i][j]=2;
else if(s[j]=='R')
startRx=i,startRy=j+1;
else if(s[j]=='J')
startJx=i,startJy=j+1;
}
}
}
inline bool ok(int i, int j)
{
if(i<1 || j<1 || i>n || j>m)
return false;
if(R[i][j]==-1)
return false;
return true;
}
inline bool ok1(int i, int j)
{
if(i<1 || j<1 || i>n || j>m)
return false;
if(J[i][j]==-1)
return false;
return true;
}
void lee()
{
int i,j,i_nou,j_nou;
R[startRx][startRy]=1;
coada.push(make_pair(startRx,startRy));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int directie=0;directie<8;directie++)
{
i_nou=i+di[directie];
j_nou=j+dj[directie];
if(ok(i_nou,j_nou) && R[i_nou][j_nou]==0){
R[i_nou][j_nou]=R[i][j]+1;
coada.push(make_pair(i_nou,j_nou));
}
}
}
coada2.push(make_pair(startJx,startJy));
J[startJx][startJy]=1;
while(!coada2.empty())
{
i=coada2.front().first;
j=coada2.front().second;
coada2.pop();
for(int directie=0;directie<8;directie++)
{
i_nou=i+di[directie];
j_nou=j+dj[directie];
if(ok1(i_nou,j_nou) && J[i_nou][j_nou]==0){
J[i_nou][j_nou]=J[i][j]+1;
coada.push(make_pair(i_nou,j_nou));
}
}
}
}
void rez()
{
int minn=INT_MAX,poz,poz1;
for(int i=1;i<=n;i++)
for(int j=0;j<m;j++)
if(R[i][j]==J[i][j] && R[i][j]){
if(R[i][j]<minn)
minn=R[i][j],poz=i,poz1=j+1;
}
cout<<minn+1<<' '<<poz+2<<' '<<poz1;
}
// 3 3 2
int main()
{
citire();
lee();
rez();
}