Pagini recente » Cod sursa (job #677106) | Cod sursa (job #377439) | Cod sursa (job #1427052) | Cod sursa (job #27264) | Cod sursa (job #1337618)
#include <cstdio>
#include <cstring>
using namespace std;
struct poz
{
int x,y;
};
poz cd[10003];
int jul[103][103],rom[103][103];
char v[101];
int dlin[8]={-1,-1,-1,0,0,1,1,1},dcol[8]={0,1,-1,-1,1,-1,0,1};
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
int n,m;
scanf("%d %d\n",&n,&m);
for (int i=0;i<=n+1;i++)
{
if (i==0||i==n+1)
for (int j=0;j<=m+1;j++)
{
jul[i][j]=-1;
rom[i][j]=-1;
}
else
{
jul[i][0]=-1;
jul[i][m+1]=-1;
rom[i][0]=-1;
rom[i][m+1]=-1;
}
}
int r1,r2,j1,j2;
for (int i=1;i<=n;i++)
{
gets(v+1);
for (int j=1;j<=m;j++)
{
if (v[j]=='R')
{
jul[i][j]=-1;
rom[i][j]=1;
r1=i;
r2=j;
}
if (v[j]=='J')
{
jul[i][j]=1;
rom[i][j]=-1;
j1=i;
j2=j;
}
if (v[j]=='X')
{
jul[i][j]=-1;
rom[i][j]=-1;
}
if (v[j]==' ')
{
jul[i][j]=0;
rom[i][j]=0;
}
}
}
int u=1,p=1,lin,col;
cd[1].x=r1;
cd[1].y=r2;
lin=r1;
col=r2;
/// pentru Romeo
while (p<=u)
{
for (int i=0;i<8;i++)
{
if (rom[lin+dlin[i]][col+dcol[i]]==0)
{
u++;
cd[u].x=lin+dlin[i];
cd[u].y=col+dcol[i];
rom[lin+dlin[i]][col+dcol[i]]=rom[lin][col]+1;
}
}
p++;
lin=cd[p].x;
col=cd[p].y;
}
///pentru Julieta
p=1;u=1;
cd[1].x=j1;
cd[1].y=j2;
lin=j1;
col=j2;
while (p<=u)
{
for (int i=0;i<8;i++)
{
if (jul[lin+dlin[i]][col+dcol[i]]==0)
{
u++;
cd[u].x=lin+dlin[i];
cd[u].y=col+dcol[i];
jul[lin+dlin[i]][col+dcol[i]]=jul[lin][col]+1;
}
}
p++;
lin=cd[p].x;
col=cd[p].y;
}
int lmin,l1,l2;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (rom[i][j]==jul[i][j]&&rom[i][j]!=-1&&rom[i][j]<lmin&&rom[i][j]!=0)
{
l1=i;l2=j;lmin=rom[i][j];
}
}
}
printf("%d %d %d",lmin,l1,l2);
}