Pagini recente » Cod sursa (job #3150872) | Cod sursa (job #1187157) | Cod sursa (job #1832316) | Cod sursa (job #1532087) | Cod sursa (job #405959)
Cod sursa(job #405959)
#include <fstream.h>
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
ifstream f("rj.in");
ofstream g("rj.out");
int a[102][102],i,j,m,n,di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},xr,yr,xj,yj,inc,sf,k,b[102][102],min=-1,xmin,ymin;
struct Element
{
int l,c,d;
} C[10000],x,y;
char t;
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
b[i][j]=a[i][j]=-2;
i=j=1;
f.get(t);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
f.get(t);
if(t=='X')
b[i][j]=a[i][j]=-1;
else
if(t=='R')
{
xr=i;
yr=j;
}
else
if(t=='J')
{
xj=i;
yj=j;
}
}
f.get(t);
}
for(i=0;i<=n+1;i++)
b[i][0]=b[i][m+1]=a[i][0]=a[i][m+1]=-1;
for(i=0;i<=m+1;i++)
b[0][i]=b[n+1][i]=a[0][i]=a[n+1][i]=-1;
x.l=xr;
x.c=yr;
x.d=0;
a[xr][yr]=0;
C[inc]=x;
while(inc<=sf)
{
x=C[inc++];
for(k=0;k<8;k++)
{
y.l=x.l+di[k];
y.c=x.c+dj[k];
if(a[y.l][y.c]==-2)
{
y.d=x.d+1;
a[y.l][y.c]=y.d;
C[++sf]=y;
}
}
}
inc=sf=0;
x.l=xj;
x.c=yj;
x.d=0;
b[xj][yj]=0;
C[inc]=x;
while(inc<=sf)
{
x=C[inc++];
for(k=0;k<8;k++)
{
y.l=x.l+di[k];
y.c=x.c+dj[k];
if(b[y.l][y.c]==-2)
{
y.d=x.d+1;
b[y.l][y.c]=y.d;
C[++sf]=y;
}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]!=-1 && a[i][j]!=-2 && a[i][j]==b[i][j])
if(a[i][j]<min || min==-1)
{
min=a[i][j];
xmin=i;
ymin=j;
}
else
if(a[i][j]==min)
if(i<xmin)
{
xmin=i;
ymin=j;
}
else
if(i==xmin)
if(j<ymin)
{
ymin=j;
}
g<<min+1<<' '<<xmin<<' '<<ymin;
return 0;
}