Pagini recente » Cod sursa (job #1229584) | Cod sursa (job #1883323) | Cod sursa (job #443068) | Rating Vasile George-Cristian (cristivasile) | Cod sursa (job #2866273)
#include <fstream>
#include <queue>
#include <iostream>
using namespace std;
const int M=1e2;
int rom[M][M],jul[M][M],n,m;
struct coord
{
int l,c;
}R,J,rez;
queue<coord>qu;
int lin[8]={-1,1,0,0,-1,1,-1,1};
int col[8]={0,0,-1,1,-1,-1,1,1};
bool exista_coord(coord pos)
{
if(pos.l>=0 && pos.l<=n-1 && pos.c>=0 && pos.c<=m-1)
return 1;
return 0;
}
void dist(int mat[100][100], coord start)
{
mat[start.l][start.c]=1;
qu.push(start);
while(!qu.empty())
{
coord cur;
cur=qu.front();
qu.pop();
for(int i=0;i<=7;i++)
{
coord urm;
urm.l=cur.l+lin[i];
urm.c=cur.c+col[i];
if(exista_coord(urm) && mat[urm.l][urm.c]==0)
{
qu.push(urm);
mat[urm.l][urm.c]=mat[cur.l][cur.c]+1;
}
}
}
}
int main()
{
ifstream in("rj.in");
ofstream out("rj.out");
in>>n>>m;
char newl;
in.get(newl);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
char t;
in.get(t);
if(t=='X')
rom[i][j]=jul[i][j]=-1;
else if(t=='R')
{
R.l=i;
R.c=j;
}
else if(t=='J')
{
J.l=i;
J.c=j;
}
}
char newl;
in.get(newl);
}
dist(rom,R);
dist(jul,J);
int dist_min=1e5;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(rom[i][j]==jul[i][j] && rom[i][j]<dist_min && rom[i][j]>0)
{
dist_min=rom[i][j];
rez.l=i+1;
rez.c=j+1;
}
}
}
out<<dist_min<<' '<<rez.l<<' '<<rez.c;
in.close();
out.close();
return 0;
}