Cod sursa(job #644938)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 decembrie 2011 20:40:21
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#define N 10000
#define M 150
int y[M][M],z[M][M],m,n,p[N/2],q[N/2],c,d,i,j,ir,jr,ij,jj,k,l,t=N,a[8]={-1,-1,-1,1,1,1,0,0},b[8]={0,1,-1,0,1,-1,1,-1};
char s[M];

void h(int x[M][M],int i, int j)
{for(int k=0;k<8;k++)
if(!x[i+a[k]][j+b[k]])
      x[i+a[k]][j+b[k]]=x[i][j]+1,p[d]=i+a[k],q[d++]=j+b[k];}

int main()
{FILE *f=fopen("rj.in","r"),*g=fopen("rj.out","w");
fscanf(f,"%d%d\n",&m,&n);
for(i=1;i<=m;i++)
     {fgets(s,M,f);
     for(j=1;j<=n;j++)
     if(s[j-1]=='X')
            y[i][j]=z[i][j]=N;
     else
            if(s[j-1]=='R')
                   ir=i,jr=j,y[i][j]=1;
            else
                   if(s[j-1]=='J')
                          ij=i,jj=j,z[i][j]=1;}
for(i=0;i<=m+1;i++)
     y[i][0]=y[i][n+1]=z[i][0]=z[i][n+1]=N;
for(j=0;j<=n+1;j++)
     y[0][j]=y[m+1][j]=z[0][j]=z[m+1][j]=N;
p[d]=ir,q[d++]=jr;
while(c<d)
     i=p[c],j=q[c++],h(y,i,j);
c=d=0,p[d]=ij,q[d++]=jj;
while(c<d)
     i=p[c],j=q[c++],h(z,i,j);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(y[i][j]==z[i][j]&&y[i][j]&&z[i][j]<t)
     t=z[i][j],k=i,l=j;
fprintf(g,"%d %d %d",t,k,l);
return 0;}