Pagini recente » Cod sursa (job #969027) | Cod sursa (job #2569556) | Cod sursa (job #38187) | Cod sursa (job #2469373) | Cod sursa (job #1378007)
#include <iostream>
#include <fstream>
#define MAX 2000000000
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
int dl[8]={-1,-1,0,1,1,1,0,-1},dc[8]={0,1,1,1,0,-1,-1,-1},i,j,x1,y1,xr,yr,xj,yj,a[105][105],b[105][105],n,m,inc,sf,Min;
char s[106];
struct nume
{
int c,l;
}C[10000],x,y;
int main()
{
f>>n>>m;
f.getline(s,105);
Min=MAX;
for (i=1;i<=n;i++)
{
f.getline(s,105);
for (j=0;j<m;j++)
{
if (s[j]=='R')
{
xr=i;
yr=j+1;
}
else if (s[j]=='J')
{
xj=i;
yj=j+1;
}
else if (s[j]=='X') a[i][j+1]=-1,b[i][j+1]=-1;
else a[i][j+1]=-2,b[i][j+1]=-2;
}
}
for (i=0;i<=n;i++)
a[i][0]=a[i][n+1]=b[i][0]=b[n+1][0]=-1;
for (i=0;i<=m;i++)
a[0][i]=a[0][m+1]=b[0][i]=b[0][m+1]=-1;
//r-a j-b
a[xr][yr]=1;
C[inc].l=xr;
C[inc].c=yr;
while (inc<=sf)
{
x=C[inc++];
for (i=0;i<8;i++)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if (a[y.l][y.c]==-2)
{
a[y.l][y.c]=a[x.l][x.c]+1;
C[++sf]=y;
}
}
}
inc=sf=0;
b[xj][yj]=1;
C[inc].l=xj;
C[inc].c=yj;
while (inc<=sf)
{
x=C[inc++];
for (i=0;i<8;i++)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if (b[y.l][y.c]==-2)
{
b[y.l][y.c]=b[x.l][x.c]+1;
C[++sf]=y;
}
}
}
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
//cout<<b[i][j]<<' ';//<<b[i][j]<<" ";
if (a[i][j]==b[i][j]&&a[i][j]>0)
{
if (Min>a[i][j])
{
Min=a[i][j];
x1=i;
y1=j;
}
}
}
//cout<<'\n';
}
g<<Min<<' '<<x1<<' '<<y1;
return 0;
}