Pagini recente » Cod sursa (job #1399536) | Cod sursa (job #2595038) | Cod sursa (job #2268386) | Cod sursa (job #542234) | Cod sursa (job #2413255)
#include <fstream>
#include <queue>
#include <string>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
#define NMAX 105
queue < pair < int, int > > C;
pair < int, int > Coordonate;
int MIN=2000000;
int dx[8]={-1,0,1,0,-1,-1,1,1};
int dy[8]={0,1,0,-1,-1,1,-1,1};
int T_Rom[NMAX][NMAX];
int T_Jul[NMAX][NMAX];
int N,M,sr,sj,fr,fj;
string S;
bool ok(int x, int y)
{
if (x<1||y<1||x>N||y>M)
return false;
return true;
}
void Lee(int i, int j, int k)
{
C.push(make_pair(i,j));
while (!C.empty())
{
int x=C.front().first;
int y=C.front().second;
C.pop();
for (int directie =0; directie < 8; directie ++)
{
int x_nou=x+dx[directie];
int y_nou=y+dy[directie];
if (k==1)
if (ok(x_nou,y_nou)&&!T_Rom[x_nou][y_nou])
{
C.push(make_pair(x_nou,y_nou));
T_Rom[x_nou][y_nou]=T_Rom[x][y]+1;
}
if (k==2)
if (ok(x_nou,y_nou)&&!T_Jul[x_nou][y_nou])
{
C.push(make_pair(x_nou,y_nou));
T_Jul[x_nou][y_nou]=T_Jul[x][y]+1;
}
}
}
}
int main()
{
fin>>N>>M;
getline(fin, S);
for (int i=1; i<=N; i++)
{
getline(fin,S);
for (int j=0; j<S.size(); j++)
{
if (S[j]=='X')
T_Rom[i][j+1]=T_Jul[i][j+1]=-1;
if (S[j]=='R') {
sr=i,fr=j+1; T_Rom[sr][fr]=1; }
if (S[j]=='J') {
sj=i,fj=j+1; T_Jul[sj][fj]=1; }
}
}
Lee(sr,fr,1);
Lee(sj,fj,2);
for (int i=1; i<=N; i++)
for (int j=1; j<=M; j++)
if (T_Rom[i][j]==T_Jul[i][j]&&T_Rom[i][j]>0)
if (T_Rom[i][j]<MIN)
{
MIN=T_Rom[i][j];
Coordonate.first=i;
Coordonate.second=j;
}
fout<<MIN<<" "<<Coordonate.first<<" "<<Coordonate.second;
}