Pagini recente » Cod sursa (job #3177166) | Cod sursa (job #425137) | Cod sursa (job #2903305) | Cod sursa (job #1507457) | Cod sursa (job #3184812)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct coord{
int lin;
int col;
};
const int dirlin[8]={-1,-1,0,1,1,1,0,-1};
const int dircol[8]={0,1,1,1,0,-1,-1,-1};
int n,m;
bool in_mat(coord i)
{
return (i.lin>=1 && i.lin<=n) &&(i.col>=1 && i.col<=m);
}
queue<coord> q;
void Lee(coord st,int dist[][105])
{
dist[st.lin][st.col]=1;
q.push(st);
while(!q.empty())
{
coord curent=q.front();
q.pop();
for(int dir=0;dir<8;dir++)
{
coord vec;
vec.lin=curent.lin+dirlin[dir];
vec.col=curent.col+dircol[dir];
if(in_mat(vec) && dist[vec.lin][vec.col]==0)
{
q.push(vec);
dist[vec.lin][vec.col]=dist[curent.lin][curent.col]+1;
}
}
}
}
int main()
{
fin>>n>>m;
string line;
getline(fin,line);
int dist_r[105][105]={0};
int dist_j[105][105]={0};
coord romeo,julieta;
for(int i=1; i<=n; i++)
{
getline(fin,line);
for(int j=1; j<=m; j++)
{
if(line[j-1]=='R')
{
romeo.lin=i;
romeo.col=j;
}
if(line[j-1]== 'X')
{
dist_r[i][j]=-1;
dist_j[i][j]=-1;
}
if(line[j-1]=='J')
{
julieta.lin=i;
julieta.col=j;
}
}
}
Lee(romeo,dist_r);
Lee(julieta,dist_j);
int tmini=10001;
coord posmin={0,0};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(dist_r[i][j]==dist_j[i][j] && dist_r[i][j]>0 && tmini>dist_r[i][j])
{
tmini=dist_r[i][j];
posmin.lin=i;
posmin.col=j;
}
}
fout<<tmini<<' '<<posmin.lin<<' '<<posmin.col;
return 0;
}