Pagini recente » Cod sursa (job #315223) | Cod sursa (job #1285726) | Cod sursa (job #2252048) | Cod sursa (job #362689) | Cod sursa (job #3191616)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin ("rj.in");
ofstream cout ("rj.out");
struct coord
{
int lin,col;
};
int rom[101][101],jul[101][101];
coord vecini[8]= {{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
bool incape(coord x,int n, int m)
{
return x.lin>=1 and x.col>=1 and x.lin<=n and x.col<=m;
}
void lee(coord ct,int n,int m,int mat[101][101])
{
queue <coord> q;
q.push(ct);
mat[ct.lin][ct.col]=1;
while(!q.empty())
{
coord current=q.front();
q.pop();
for(int k=0; k<8; k++)
{
coord verif= {current.lin+vecini[k].lin,current.col+vecini[k].col};
if(incape(verif,n,m) and mat[verif.lin][verif.col]==0)
{
q.push(verif);
mat[verif.lin][verif.col]=mat[current.lin][current.col]+1;
}
}
}
}
int main()
{
int n,m;
cin>>n>>m;
coord r,j;
cin.get();
for(int i=1; i<=n; i++)
{
string s;
getline(cin, s);
for(int k=0; k<m; k++)
{
if(s[k]=='R')
{
r.lin=i;
r.col=k+1;
}
else if(s[k]=='J')
{
j.lin=i;
j.col=k+1;
}
else if(s[k]=='X')
{
rom[i][k+1]=-1;
jul[i][k+1]=-1;
}
else
{
rom[i][k+1]=0;
jul[i][k+1]=0;
}
}
}
lee(r,n,m,rom);
lee(j,n,m,jul);
int tmin=n*m;
coord intalnire;
intalnire.col=m;
for(int i=1; i<=n; i++)
for(int k=1; k<=m; k++)
if(rom[i][k]==jul[i][k] and tmin>jul[i][k] and rom[i][k]>0)
{
intalnire.lin=i;
intalnire.col=k;
tmin=rom[i][k];
}
cout<<tmin<<' '<<intalnire.lin<<' '<<intalnire.col;
return 0;
}