Pagini recente » Cod sursa (job #448558) | Cod sursa (job #2971361) | Cod sursa (job #1348833) | Cod sursa (job #2629549) | Cod sursa (job #2392641)
#include <bits/stdc++.h>
#define NMax 1005
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[] = {0, -1, 0, 1,-1,1,1,-1};
int dy[] = {-1, 0, 1, 0,-1,-1,1,1};
void lee(int a[NMax][NMax],int x, int y)
{
deque < int > qx, qy;
qx.push_back(x);
qy.push_back(y);
a[x][y] = 1;
while(qx.empty() == false)
{
x=qx.front();
y=qy.front();
qx.pop_front();
qy.pop_front();
for(int i=0; i<8; i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(a[nx][ny]==0)
{
a[nx][ny]=a[x][y]+1;
qx.push_back(nx);
qy.push_back(ny);
}
}
}
}
int x[NMax][NMax],a[NMax][NMax],b[NMax][NMax];
int main()
{
int n,m,x1,x2,y1,y2,i1,j1,mn=2000000000;
string s;
f>>n>>m;
f.get();
for(int i=1; i<=n; i++)
{
getline(f,s);
for(int j=0; j<m; j++)
{
if(s[j]=='X')
x[i][j+1]=a[i][j+1]=b[i][j+1]=-1;
else if(s[j]=='R')
{
a[i][j+1]=1;
x1=i;
y1=j+1;
}
else if(s[j]=='J')
{
b[i][j+1]=1;
x2=i;
y2=j+1;
}
}
}
for(int i=0; i<=m+1; i++)
x[0][i]=a[0][i]=b[0][i]=-1;
for(int i=0; i<=m+1; i++)
x[n+1][i]=a[n+1][i]=b[n+1][i]=-1;
for(int i=0; i<=n+1; i++)
x[i][0]=a[i][0]=b[i][0]=-1;
for(int i=0; i<=n+1; i++)
x[i][m+1]=a[i][m+1]=b[i][m+1]=-1;
lee(a,x1,y1);
lee(b,x2,y2);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(a[i][j]==b[i][j] && a[i][j]<mn && a[i][j]>0)
{
mn=a[i][j];
i1=i;
j1=j;
}
g<<mn<<" "<<i1<<" "<<j1;
return 0;
}