Pagini recente » Cod sursa (job #1649285) | Cod sursa (job #1356331) | Cod sursa (job #1441364) | Cod sursa (job #1738808) | Cod sursa (job #2268432)
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n, m, pir, pjr, pij, pjj, a[105][105], b[105][105], vmin=999, mi, mj;
queue<pair<int, int> >Q;
int vi[8]={-1, -1, 0, 1, 1, 1, 0, -1};
int vj[8]={0, 1, 1, 1, 0, -1, -1, -1};
void lee(int x[105][105], int pi, int pj)
{
x[pi][pj]=1;
Q.push(make_pair(pi, pj));
while(!Q.empty())
{
int i=Q.front().first;
int j=Q.front().second;
Q.pop();
for(int v=0;v<8;v++)
{
int iv=i+vi[v];
int jv=j+vj[v];
if(x[iv][jv]==0 && iv>0 && jv>0)
{
Q.push(make_pair(iv, jv));
x[iv][jv]=x[i][j]+1;
}
}
}
}
void bordare(int x[105][105], int n, int m)
{
for(int i=0; i<=n+1; i++)
{
x[i][0]=-1;
x[i][m+1]=-1;
}
for(int j=0; j<=m+1; j++)
{
x[0][j]=-1;
x[n+1][j]=-1;
}
}
int main()
{
f>>n>>m;
f.get();
for(int i=1; i<=n; i++)
{
char c;
for(int j=1; j<=m; j++)
{
f.get(c);
if(c==10)
break;
if(c=='X')
{
a[i][j]=-1;
b[i][j]=-1;
}
else if(c=='R')
{
pir=i;
pjr=j;
}
else if(c=='J')
{
pij=i;
pjj=j;
}
}
if(c!=10)
f.get();
}
bordare(a, n, m);
bordare(b, n, m);
lee(a, pir, pjr);
lee(b, pij, pjj);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
if(a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0)
{
if(vmin>=a[i][j])
{
vmin=a[i][j];
mi=i;
mj=j;
}
}
}
g<<vmin<<' '<<mi<<' '<<mj;
return 0;
}