Pagini recente » Cod sursa (job #678933) | Cod sursa (job #509487) | Cod sursa (job #2082352) | Cod sursa (job #2169505) | Cod sursa (job #2489336)
#include <fstream>
using namespace std;
struct punct{int x,y;} rom,jul,st[10001],p;
int n,m,r[101][102],j[101][102],mini=999999,K;
char s[101][102];
ifstream f ("rj.in");
ofstream g ("rj.out");
int main()
{
f>>n>>m;
f.get();
for(int i=1;i<=n;i++)
{
f.getline(s[i],m+1);
for(int k=0;k<m;k++)
{
if(s[i][k]=='R')
{
rom.x=i;
rom.y=k+1;
}
else if(s[i][k]=='J')
{
jul.x=i;
jul.y=k+1;
}
else if(s[i][k]=='X')
{
r[i][k+1]=-1;
j[i][k+1]=-1;
}
}
}
K=1;
st[K]=rom;
r[st[1].x][st[1].y]=1;
for(int i=1;i<=K;i++)
{
if(r[st[i].x-1][st[i].y]==0 && st[i].x-1>=1)
{
r[st[i].x-1][st[i].y]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y;
}
if(r[st[i].x+1][st[i].y]==0 && st[i].x+1<=n)
{
r[st[i].x+1][st[i].y]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y;
}
if(r[st[i].x][st[i].y-1]==0 && st[i].y-1>=1)
{
r[st[i].x][st[i].y-1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x;
st[K].y=st[i].y-1;
}
if(r[st[i].x][st[i].y+1]==0 && st[i].y+1<=m)
{
r[st[i].x][st[i].y+1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x;
st[K].y=st[i].y+1;
}
if(r[st[i].x+1][st[i].y+1]==0 && st[i].y+1<=m && st[i].x+1<=n)
{
r[st[i].x+1][st[i].y+1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y+1;
}
if(r[st[i].x-1][st[i].y+1]==0 && st[i].y+1<=m && st[i].x-1>=1)
{
r[st[i].x-1][st[i].y+1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y+1;
}
if(r[st[i].x+1][st[i].y-1]==0 && st[i].y-1>=1 && st[i].x+1<=n)
{
r[st[i].x+1][st[i].y-1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y-1;
}
if(r[st[i].x-1][st[i].y-1]==0 && st[i].y-1>=1 && st[i].x-1>=1)
{
r[st[i].x-1][st[i].y-1]=r[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y-1;
}
}
K=1;
st[K]=jul;
j[st[1].x][st[1].y]=1;
for(int i=1;i<=K;i++)
{
if(j[st[i].x-1][st[i].y]==0 && st[i].x-1>=1)
{
j[st[i].x-1][st[i].y]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y;
}
if(j[st[i].x+1][st[i].y]==0 && st[i].x+1<=n)
{
j[st[i].x+1][st[i].y]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y;
}
if(j[st[i].x][st[i].y-1]==0 && st[i].y-1>=1)
{
j[st[i].x][st[i].y-1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x;
st[K].y=st[i].y-1;
}
if(j[st[i].x][st[i].y+1]==0 && st[i].y+1<=m)
{
j[st[i].x][st[i].y+1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x;
st[K].y=st[i].y+1;
}
if(j[st[i].x+1][st[i].y+1]==0 && st[i].y+1<=m && st[i].x+1<=n)
{
j[st[i].x+1][st[i].y+1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y+1;
}
if(j[st[i].x-1][st[i].y+1]==0 && st[i].y+1<=m && st[i].x-1>=1)
{
j[st[i].x-1][st[i].y+1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y+1;
}
if(j[st[i].x+1][st[i].y-1]==0 && st[i].y-1>=1 && st[i].x+1<=n)
{
j[st[i].x+1][st[i].y-1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x+1;
st[K].y=st[i].y-1;
}
if(j[st[i].x-1][st[i].y-1]==0 && st[i].y-1>=1 && st[i].x-1>=1)
{
j[st[i].x-1][st[i].y-1]=j[st[i].x][st[i].y]+1;
K++;
st[K].x=st[i].x-1;
st[K].y=st[i].y-1;
}
}
for(int i=1;i<=n;i++)
{
for(int k=1;k<=m;k++)
{
if(r[i][k]==j[i][k] && r[i][k]<mini && r[i][k]>=1)
{
mini=r[i][k];
p.x=i;
p.y=k;
}
}
}
g<<mini<<' '<<p.x<<' '<<p.y;
f.close();
g.close();
return 0;
}