Pagini recente » Cod sursa (job #822780) | Cod sursa (job #3154398) | Cod sursa (job #310941) | Cod sursa (job #1557507) | Cod sursa (job #1072860)
#include <fstream>
#include <queue>
using namespace std;
int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0},dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int R[105][105], J[105][105], m, n, t = 2000000,i,j;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct pt {int x, y;} sr, sj, meet;
queue <pt> Q;
pt init (int x, int y){pt a;a.x=x,a.y=y;return a;}
void Lee (int a[][105], pt s, pt f)
{
Q.push(s);
a[s.x][s.y] = 1;
while (Q.size())
{
i = Q.front().x;
j = Q.front().y;
for (int k = 0; k < 8; k++)
{
int ii = i + dx[k];
int jj = j + dy[k];
if (ii>=0&&jj>=0&&ii<m&&jj<n&&!a[ii][jj])
{
a[ii][jj]=a[i][j]+1;
Q.push(init(ii,jj));
}
}
Q.pop();
}
}
int main ()
{
char v[105];
fin >> m >> n;
fin.get();
for (i = 0; i < m; ++i)
{
fin.getline (v, 105);
for (j = 0; j < n; ++j)
{
if (v[j]=='X')
R[i][j]=J[i][j]=-1;
if (v[j]=='R')
sr.x=i,sr.y=j;
if (v[j]=='J')
sj.x=i,sj.y=j;
}
}
Lee (R, sr, sj);
Lee (J, sj, sr);
for (i = 0; i < m; ++i)
for (j = 0; j < n; ++j)
if (R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < t)
{
meet.x=i;
meet.y=j;
t=R[i][j];
}
fout<<t<<" "<<meet.x+1<<" "<<meet.y+1;
return 0;
}