Cod sursa(job #329320)
Utilizator | Data | 5 iulie 2009 20:55:22 | |
---|---|---|---|
Problema | Rj | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 5.03 kb |
#include<stdio.h>
int a[104][104],b[104][104],i,j,n,m,xr,yr,xj,yj,k;
char s[104];
struct nod
{
int x,y;
} r[10001];
void ver( int i,int j,int a[][104])
{
if(i-1>=1) { if(a[i-1][j]==0||a[i-1][j]>a[i][j]+1) { a[i-1][j]=a[i][j]+1;
r[++k].x=i-1;
r[k].y=j;
}
if(j-1>=1) if(a[i-1][j-1]==0||a[i-1][j-1]>a[i][j]+1) { a[i-1][j-1]=a[i][j]+1;
r[++k].x=i-1;
r[k].y=j-1;
}
if(j+1<=m) if(a[i-1][j+1]==0||a[i-1][j+1]>a[i][j]+1) { a[i-1][j+1]=a[i][j]+1;
r[++k].x=i-1;
r[k].y=j+1;
}
}
if(j-1>=1) if(a[i][j-1]==0||a[i][j-1]>a[i][j]+1) { a[i][j-1]=a[i][j]+1;
r[++k].x=i;
r[k].y=j-1;
}
if(j+1<=m) if(a[i][j+1]==0||a[i][j+1]>a[i][j]+1) { a[i][j+1]=a[i][j]+1;
r[++k].x=i;
r[k].y=j+1;
}
if(i+1<=n) { if(a[i+1][j]==0||a[i+1][j]>a[i][j]+1) { a[i+1][j]=a[i][j]+1;
r[++k].x=i+1;
r[k].y=j;
}
if(j-1>=1) if(a[i+1][j-1]==0||a[i+1][j-1]>a[i][j]+1) { a[i+1][j-1]=a[i][j]+1;
r[++k].x=i+1;
r[k].y=j-1;
}
if(j+1<=m) if(a[i+1][j+1]==0||a[i+1][j+1]>a[i][j]+1) { a[i+1][j+1]=a[i][j]+1;
r[++k].x=i+1;
r[k].y=j+1;
}
}
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("\n");
for(i=1;i<=n;i++)
{ fgets(s+1,103,stdin);
for(j=1;j<=m;j++)
{ if(s[j]=='X') { a[i][j]=-1;
b[i][j]=-1;
}
if(s[j]=='R') { a[i][j]=1;
xr=i;
yr=j;
}
if(s[j]=='J') { b[i][j]=1;
xj=i;
yj=j;
}
}
}
r[++k].x=xr;
r[k].y=yr;
for(i=1;i<=k;i++) ver(r[i].x,r[i].y,a);
k=0;
r[++k].x=xj;
r[k].y=yj;
for(i=1;i<=k;i++) ver(r[i].x,r[i].y,b);
k=2000000000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) if(a[i][j]==b[i][j]&&a[i][j]>0) if(a[i][j]<k) { k=a[i][j] ;
xr=i;
yr=j;
}
printf("%d %d %d\n",k,xr,yr);
fclose(stdin);
fclose(stdout);
return 0;
}