Cod sursa(job #2518374)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 5 ianuarie 2020 16:55:45
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.75 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, linn, coll,x, ok;
    char c;

    fin=fopen("rj.in", "r");
    fout=fopen("rj.out", "w");
    fscanf( fin, "%d %d", &n, &m);
    fscanf( fin, "%c", &c);
    for(i=1;i<=n;i++) {
            ok=1;
            for(j=1;j<=m;j++) {
                    fscanf( fin, "%c", &c);
                    if(c=='\n') {
                        ok=0;
                            j=m+1;
                    }
            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;
           }
fprintf( fout, "%c", c);
            }
            if(ok==1) {
            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++;
    }
    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++;
    }

    min=1000000;
    for(i=1;i<=n;i++) {
            for(j=1;j<=m;j++) {
                    if(a[i][j]==b[i][j] && a[i][j]>0) {
                         if(a[i][j]<min) {
                                min=a[i][j]+1;
                                linn=i;
                                coll=j;
                         }
                    }
            }
    }
    fprintf( fout, "%d %d %d", min, linn, coll);
     fclose( fin );
     fclose( fout );
        return 0;
}