Cod sursa(job #2211360)

Utilizator andra1782Andra Alazaroaie andra1782 Data 9 iunie 2018 23:17:38
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <stdio.h>
#define MAX 102
FILE *fin,*fout;
int n,m,l[MAX*MAX],c[MAX*MAX],rd[MAX][MAX],jd[MAX][MAX];
char t[MAX][MAX];
char dl[8]={1,1,-1,-1,0,0,1,-1};
char dc[8]={1,-1,1,-1,1,-1,0,0};

void lee(int ls, int cs, int p[][MAX]){
    int s,e,lc,cc,i,j;

    for(i=0; i<=n+1; i++)
        for(j=0; j<=m+1; j++)
            p[i][j]=t[i][j];
    s=0;
    l[0]=ls;
    c[0]=cs;
    e=1;
    p[ls][cs]=1;
    while(s<e){
        lc=l[s];
        cc=c[s];
        for(i=0; i<8; i++){
            if(p[lc+dl[i]][cc+dc[i]]==0){
                p[lc+dl[i]][cc+dc[i]]=p[lc][cc]+1;
                l[e]=lc+dl[i];
                c[e]=cc+dc[i];
                e++;
            }
        }
        s++;
    }
}

int main(){
    fin=fopen("rj.in","r");
    fout=fopen("rj.out","w");
    int i,j,xr,yr,xj,yj;
    char ch;

    fscanf(fin,"%d%d ",&n,&m);
    for(i=0; i<=n+1; i++)
        t[i][0]=t[i][m+1]=-1;
    for(i=0; i<=m+1; i++)
        t[0][i]=t[n+1][i]=-1;
    for(i=1; i<=n; i++){
        j=1;
        ch=fgetc(fin);
        while(j<=m && ch!='\n' && ch!=EOF){
            if(ch!=' ')
                t[i][j]=-1;
            if(ch=='R'){
                xr=i;
                yr=j;
            }else if(ch=='J'){
                xj=i;
                yj=j;
            }
            j++;
            ch=fgetc(fin);
        }
    }
    lee(xr,yr,rd);
    lee(xj,yj,jd);
    int tmin=1000000000,x,y;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(rd[i][j]>0 && rd[i][j]==jd[i][j] && tmin>rd[i][j]){
                tmin=rd[i][j];
                x=i;
                y=j;
            }
    fprintf(fout,"%d %d %d\n",tmin,x,y);
    fclose(fin);
    fclose(fout);
    return 0;
}