Pagini recente » Borderou de evaluare (job #2687937) | Cod sursa (job #2092384)
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
#define INF 99999
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue < pair < int, int > > Q;
int dx[8]= {-1,-1,-1,0,1,1,1,0};
int dy[8]= {-1,0,1,1,1,0,-1,-1};
int n, m, a[101][101], b[101][101];
int x1, y1, x2, y2;
char c[101];
bool inauntru(int x, int y)
{
if(x<1||y<1||x>n||y>m)
return false;
return true;
}
void Lee(int x, int y, int v[101][101])
{
v[x][y]=1;
Q.push(make_pair(x,y));
while(!Q.empty())
{
int ii=Q.front().first, jj=Q.front().second;
Q.pop();
for(int dir=0; dir<8; dir++)
if(inauntru(ii+dx[dir],jj+dy[dir])&&v[ii+dx[dir]][jj+dy[dir]]==0)
{
v[ii+dx[dir]][jj+dy[dir]]=v[ii][jj]+1;
Q.push(make_pair(ii+dx[dir],jj+dy[dir]));
}
}
}
int main()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
{
fin.get();
fin.get(c,101);
for(int j=0; j<m; j++)
{
if(c[j]=='X')
a[i][j+1]=b[i][j+1]=-1;
else if(c[j]=='R')
x1=i, y1=j+1, b[i][j+1]=-1;
else if(c[j]=='J')
x2=i, y2=j+1, a[i][j+1]=-1;
}
}
Lee(x1,y1,a);
Lee(x2,y2,b);
int MIN=INF, poz1=0, poz2=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(a[i][j]==b[i][j]&&a[i][j]>0&&a[i][j]<MIN)
MIN=a[i][j], poz1=i, poz2=j;
fout << MIN << " " << poz1 << " " << poz2;
return 0;
}