Pagini recente » Cod sursa (job #144035) | Cod sursa (job #2598434) | Cod sursa (job #1448275) | Cod sursa (job #329385) | Cod sursa (job #3151233)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct coord
{
int x,y;
};
int drumRomeo[105][105],drumJulieta[105][105];
int n,m;
queue <coord> q;
int poz[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
bool EInMat(coord k)
{
return k.x<=n && k.x>=1 && k.y<=m && k.y>=1;
}
void Lee(int mat[105][105], coord inc)
{
mat[inc.x][inc.y]=1;
q.push(inc);
while(!q.empty())
{
coord posc=q.front();
q.pop();
for(int i=0;i<8;i++)
{
coord pos;
pos.x=posc.x+poz[i][0];
pos.y=posc.y+poz[i][1];
if(EInMat(pos) && mat[pos.x][pos.y]==0)
{
q.push(pos);
mat[pos.x][pos.y]=mat[posc.x][posc.y]+1;
}
}
}
}
int main()
{
cin>>n>>m;
coord Romeo, Julieta;
string s;
getline(cin, s);
for(int i=1;i<=n;i++)
{
getline(cin, s);
for(int j=1;j<=m;j++)
{
char c=s[j-1];
if(c=='X')
{
drumJulieta[i][j]=-1;
drumRomeo[i][j]=-1;
}
if(c=='R')
{
Romeo.x=i;
Romeo.y=j;
}
if(c=='J')
{
Julieta.x=i;
Julieta.y=j;
}
}
}
Lee(drumJulieta, Julieta);
Lee(drumRomeo, Romeo);
int drumMinim=10001;
coord pozDrumMinim;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(drumJulieta[i][j]==drumRomeo[i][j] && drumJulieta[i][j]<drumMinim && drumJulieta[i][j]>0)
{
drumMinim=drumJulieta[i][j];
pozDrumMinim.x=i;
pozDrumMinim.y=j;
}
cout<<drumMinim<<" "<<pozDrumMinim.x<<" "<<pozDrumMinim.y<<" ";
return 0;
}