Cod sursa(job #1882946)

Utilizator EmplopiStefan Nitu Emplopi Data 17 februarie 2017 16:55:13
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#include <stdlib.h>

char mat[102][102], dirx[8]={-1, -1, 0, 1, 1, 1, 0, -1}, diry[8]={0, 1, 1, 1, 0, -1, -1, -1};
int dist[2][102][102];

void bordare(int n, int m){
    int i;
    for(i=0;i<n+2;i++){
        mat[i][0]='X';
        mat[i][m+1]='X';
    }
    for(i=0;i<m+2;i++){
        mat[0][i]='X';
        mat[n+1][i]='X';
    }
}

void drum(int var, int x, int y, int nr){
    int i;
    dist[var][x][y]=nr;
    for(i=0;i<8;i++)
        if(mat[x+dirx[i]][y+diry[i]]==' ' && dist[var][x+dirx[i]][y+diry[i]]>nr+1)
            drum(var, x+dirx[i], y+diry[i], nr+1);
}

int main(){
    FILE *fin, *fout;
    int n, m, i, j, xr, yr, xj, yj, min, y, xmin, ymin;
    fin=fopen("rj.in", "r");
    fout=fopen("rj.out", "w");
    fscanf(fin, "%d%d", &n, &m);
    fgetc(fin);
    bordare(n, m);
    for(i=1;i<n+1;i++){
        for(j=1;j<m+1;j++){
            mat[i][j]=fgetc(fin);
            if(mat[i][j]=='R'){
                xr=i;
                yr=j;
            }
            if(mat[i][j]=='J'){
                xj=i;
                yj=j;
            }
        }
        fgetc(fin);
    }
    //for(y=0;y<2;y++)
        //for(i=0;i<n+2;i++)
            //for(j=0;j<m+2;j++)
                //dist[y][i][j]=10000;
    drum(0, xr, yr, 1);
    drum(1, xj, yj, 1);
    min=10000;
    //printf("\n");
    for(i=1;i<n+1;i++){
        for(j=1;j<m+1;j++){
            //printf("%6d ", dist[0][i][j]);
            if(dist[0][i][j]==dist[1][i][j])
                if(min>dist[0][i][j]){
                    min=dist[0][i][j];
                    xmin=i;
                    ymin=j;
                }
        }
        //printf("\n");
    }
    fprintf(fout, "%d %d %d", min, xmin, ymin);
    fclose(fin);
    fclose(fout);

    return 0;
}