Cod sursa(job #2166558)

Utilizator rares1012Rares Cautis rares1012 Data 13 martie 2018 17:44:57
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.54 kb
#include <stdio.h>
#include <stdlib.h>

char marc1[102][102];
char marc2[102][102];

int val[101][101];

int lee[10000][3];

char dirl[4]={-1,0,1,0};
char dirc[4]={0,1,0,-1};

int main()
{
    int n,m,i,j,rl,rc,jl,jc,fst,lst,k,min=10000,al,ac;
    char c;
    FILE*fi,*fo;
    fi=fopen("rj.in","r");
    fo=fopen("rj.out","w");
    fscanf(fi,"%d%d",&n,&m);
    fgetc(fi);
    for(i=1;i<=n;i++){
        j=1;
        c=fgetc(fi);
        while(j<=m && c!='\n' && c!=EOF)
            {
                if(c!=' '){
                if(c=='R')
                    {
                        rl=i;
                        rc=j;
                    }
                else if(c=='J'){
                    jl=i;
                    jc=j;
                }
                else {marc1[i][j]=-1;
                marc2[i][j]=-1;}
                }
                c=fgetc(fi);
                j++;
            }
    }
    for(i=0;i<=n+1 || i<=m+1;i++){
        marc1[i][0]=-1;
        marc1[0][i]=-1;
        marc1[i][m+1]=-1;
        marc1[n+1][i]=-1;
        marc2[i][0]=-1;
        marc2[0][i]=-1;
        marc2[i][m+1]=-1;
        marc2[n+1][i]=-1;
    }
    lee[0][0]=rl;
    lee[0][1]=rc;
    lee[0][2]=0;
    marc1[rl][rc]=-1;
    fst=0;
    lst=1;
    while(fst<lst){
        val[lee[fst][0]][lee[fst][1]]=lee[fst][2];
        for(k=0;k<4;k++){
            if(marc1[lee[fst][0]+dirl[k]][lee[fst][1]+dirc[k]]!=-1)
            {
                lee[lst][0]=lee[fst][0]+dirl[k];
                lee[lst][1]=lee[fst][1]+dirc[k];
                lee[lst][2]=lee[fst][2]+1;
                marc1[lee[lst][0]][lee[lst][1]]=-1;
                lst++;
            }
        }
        fst++;
    }
    lee[0][0]=jl;
    lee[0][1]=jc;
    lee[0][2]=0;
    marc2[jl][jc]=-1;
    fst=0;
    lst=1;
    while(fst<lst){
        if(lee[fst][2]>val[lee[fst][0]][lee[fst][1]])
            val[lee[fst][0]][lee[fst][1]]=lee[fst][2];
        for(k=0;k<4;k++){
            if(marc2[lee[fst][0]+dirl[k]][lee[fst][1]+dirc[k]]!=-1)
            {
                lee[lst][0]=lee[fst][0]+dirl[k];
                lee[lst][1]=lee[fst][1]+dirc[k];
                lee[lst][2]=lee[fst][2]+1;
                marc2[lee[lst][0]][lee[lst][1]]=-1;
                lst++;
            }
        }
        fst++;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            {
                if(val[i][j]>0 && val[i][j]<min){
                    min=val[i][j];
                    al=i;
                    ac=j;
                }
            }
    }
    fprintf(fo,"%d %d %d",min,al,ac);
    fclose(fi);
    fclose(fo);
    return 0;
}