Pagini recente » Borderou de evaluare (job #2364761) | Cod sursa (job #2501061) | Borderou de evaluare (job #1570429) | Cod sursa (job #3231741) | Cod sursa (job #3231725)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct poz{int l,c;};
int Min=2e9, lee[110][110][3], n, m, dx[]={-1,0,1,0,-1,1,1,-1}, dy[]={0,-1,0,1,-1,1,-1,1};
void leee(poz a, int ok)
{
deque<poz> q;
q.clear();
poz x, y;
q.push_back(a);
lee[a.l][a.c][ok]=1;
while(q.empty()==false)
{
x=q.front();
q.pop_front();
for(int k=0;k<8;++k)
{
y.l=x.l+dx[k];
y.c=x.c+dy[k];
if(lee[y.l][y.c][ok]>lee[x.l][x.c][ok]+1)
{
lee[y.l][y.c][ok]=lee[x.l][x.c][ok]+1;
q.push_back(y);
}
}
}
}
poz a, b,ans;
char s[110];
int main()
{
fin>>n>>m;
fin.getline(s,105);
for(int i=1;i<=n;++i)
{
fin.getline(s,105);
for(int j=0;j<m;++j)
{
if(s[j]=='R')
a={i,j+1};
else if(s[j]=='J')
b={i,j+1};
else if(s[j]=='X')
lee[i][j+1][0]=lee[i][j+1][1]=-1;
if(s[j]!='X')
lee[i][j+1][0]=lee[i][j+1][1]=2e9;
}
}
for(int i=0;i<=n+1;++i)
for(int j=0;j<=1;++j)
lee[i][0][j]=lee[i][m+1][j]=-1;
for(int j=0;j<=m+1;++j)
for(int i=0;i<=1;++i)
lee[0][j][i]=lee[n+1][j][i]=-1;
leee(a,0);
leee(b,1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(lee[i][j][0]!=-1 && lee[i][j][0]==lee[i][j][1])
if(lee[i][j][0]<Min)
{
Min=lee[i][j][0];
ans={i,j};
}
fout<<Min<<" "<<ans.l<<" "<<ans.c;
return 0;
}