Cod sursa(job #968494)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 2 iulie 2013 11:01:47
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<cstdio>
char x[101][101];
int t,it,jt,m,n,i,j,ic,jc,iv,jv,c[2][20001],d,p,u,y[101][101],z[101][101],ir,jr,ij,jj;
int di[8]={1,1,0,-1,-1,-1, 0, 1};
int dj[8]={0,1,1, 1, 0,-1,-1,-1};
FILE *f,*g;
int main(){
    f=fopen("rj.in","r");
    g=fopen("rj.out","w");
    fscanf(f,"%d %d\n",&m,&n);
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            fscanf(f,"%c",&x[i][j]);
            if (x[i][j] == 'R'){
                ir = i;
                jr = j;
            }
            if (x[i][j] == 'J'){
                ij=i;
                jj=j;
            }
        }
        fscanf(f,"\n");
    }
    u=1;
    p=1;
    c[0][u]=ir;
    c[1][u]=jr;
    y[ir][jr]=1;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        for(d=0;d<=7;d++){
            iv=ic+di[d];
            jv=jc+dj[d];
            if(x[iv][jv]==' ' && iv>=1 && iv<=m
               && jv>=1 && jv<=n && y[iv][jv]==0){
               u++;
               c[0][u]=iv;
               c[1][u]=jv;
               y[iv][jv]=y[ic][jc]+1;
            }
        }
        p++;
    }
    u=1;
    p=1;
    c[0][u]=ij;
    c[1][u]=jj;
    z[ij][jj]=1;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        for(d=0;d<=7;d++){
            iv=ic+di[d];
            jv=jc+dj[d];
            if(x[iv][jv]==' ' && iv>=1 && iv<=m
               && jv>=1 && jv<=n && z[iv][jv]==0){
               u++;
               c[0][u]=iv;
               c[1][u]=jv;
               z[iv][jv]=z[ic][jc]+1;
               t=z[iv][jv];
            }
        }
        p++;
    }
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            if(y[i][j]==z[i][j] && y[i][j]<t && y[i][j]!=0){
                t=y[i][j];
                it=i;
                jt=j;
            }
        }
    }
    fprintf(g,"%d %d %d",it,jt,t);
    fclose(f);
    fclose(g);
    return 0;
}