Cod sursa(job #1937187)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 23 martie 2017 19:32:13
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <iostream>
#include<stdio.h>

struct ind {
int lin, col;
};

int a[176][176], b[176][176];
int linie[]={-1,-1,0,1,1,1,0,-1};
int colo[]={0,1,1,1,0,-1,-1,-1};
ind coada[40001];
using namespace std;

int main() {
    FILE *fin, *fout;
    int n, m, lc, cc, i, sf, in, l, pix, piy, pfx, pfy, col, lin, j, min;
    char c;

    fin=fopen("rj.in", "r");
    fout=fopen("rj.out", "w");
    fscanf( fin, "%d %d\n", &n, &m);
    for(i=1;i<=n;i++) {
            for(j=1;j<=m;j++) {
            fscanf( fin, "%c", &c);
            if(c=='X') {
            a[i][j]=-1;
            b[i][j]=-1;
            }
            if(c=='R') {
                piy=i;
                pix=j;
            }
            if(c=='J') {
                pfy=i;
                pfx=j;
            }
            }
            fscanf( fin, "%c", &c);
    }
    for(i=0;i<=n+1;i++) {
            a[i][0]=-1;
            a[i][m+1]=-1;
            b[i][0]=-1;
            b[i][m+1]=-1;
    }
        for(j=0;j<=m+1;j++) {
            a[0][j]=-1;
            a[n+1][j]=-1;
            b[0][j]=-1;
            b[n+1][j]=-1;
    }
    in=1;
    sf=1;
    coada[1].lin=piy;
    coada[1].col=pix;
    while(in<=sf) {
        for(i=0;i<8;i++) {
            lc=coada[in].lin+linie[i];
            cc=coada[in].col+colo[i];
            if(a[lc][cc]==0) {
                    sf++;
                    coada[sf].lin=lc;
                    coada[sf].col=cc;
                    a[lc][cc]=a[coada[in].lin][coada[in].col]+1;
            }
        }
        in++;
    }
    fprintf( fout, "%d ", a[pfy][pfx]+1);
    in=1;
    sf=1;
    coada[1].lin=pfy;
    coada[1].col=pfx;
    while(in<=sf) {
        for(i=0;i<8;i++) {
            lc=coada[in].lin+linie[i];
            cc=coada[in].col+colo[i];
            if(b[lc][cc]==0) {
                    sf++;
                    coada[sf].lin=lc;
                    coada[sf].col=cc;
                    b[lc][cc]=b[coada[in].lin][coada[in].col]+1;
            }
        }
        in++;
    }
    fprintf( fout, "%d ", b[piy][pix]+1);
    min=1000000;
    for(i=1;i<=n;i++) {
            for(j=1;j<=m;j++) {
                    if(a[i][j]==b[i][j] && a[i][j]!=-1) {
                         if(a[i][j]<min) {
                                min=a[i][j]+1;
                         }
                    }
            }
    }
    fprintf( fout, "%d", min);
     fclose( fin );
     fclose( fout );
        return 0;
}