Pagini recente » Cod sursa (job #1357291) | Cod sursa (job #1212885) | Cod sursa (job #433772) | Cod sursa (job #2740011) | Cod sursa (job #2784926)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, xR, yR, xJ, yJ, xM, yM, minim=INT_MAX, aux;
int a[105][105], leer[105][105], leej[105][105];
int dx[] = {-1, 1, 0, 0, 1, -1, -1, 1}, dy[] = {0, 0, -1, 1, 1, 1, -1, -1};
char c;
struct coord
{
int x;
int y;
};
queue<coord> q;
inline void Citire()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
{
for(int j=0; j<m+1; j++)
{
fin.get(c);
if(c == 'X')
a[i][j] = 1;
else if(c ==' ')
a[i][j] = 0;
else if(c == 'R')
xR=i, yR=j;
else if(c == 'J')
xJ=i, yJ=j;
}
}
}
inline void Bordare()
{
for(int i=1; i<=n; i++)
a[i][0] = a[i][m+1] = 1;
for(int i=1; i<=m; i++)
a[0][i] = a[n+1][i] = 1;
}
inline void Afisare()
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(leer[i][j] == leej[i][j] && leer[i][j]!=0)
{
aux=leer[i][j];
if(aux<minim)
{
minim = aux;
xM = i, yM = j;
}
}
}
}
fout << leer[xM][yM] << " " << xM << " " << yM;
}
inline void LeeR()
{
int x, y;
coord w1, w2;
w1.x=xR;
w1.y=yR;
q.push(w1);
leer[xR][yR]=1;
while (q.empty()!=1)
{
w1=q.front();
q.pop();
for(int i=0; i<=7; i++)
{
x=w1.x+dx[i];
y=w1.y+dy[i];
if(a[x][y]==0 && (leer[x][y]==0 || leer[x][y] > leer[w1.x][w1.y]+1))
{
leer[x][y]=leer[w1.x][w1.y]+1;
w2.x=x;
w2.y=y;
q.push(w2);
}
}
}
}
inline void LeeJ()
{
int x, y;
coord w1, w2;
w1.x=xJ;
w1.y=yJ;
q.push(w1);
leej[xJ][yJ]=1;
while (q.empty()!=1)
{
w1=q.front();
q.pop();
for(int i=0; i<=7; i++)
{
x=w1.x+dx[i];
y=w1.y+dy[i];
if(a[x][y]==0 && (leej[x][y]==0 || leej[x][y] > leej[w1.x][w1.y]+1))
{
leej[x][y]=leej[w1.x][w1.y]+1;
w2.x=x;
w2.y=y;
q.push(w2);
}
}
}
}
int main()
{
Citire();
Bordare();
LeeR();
LeeJ();
Afisare();
return 0;
}