Cod sursa(job #2521734)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 11 ianuarie 2020 13:41:06
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.77 kb
#include <iostream>
#include<stdio.h>

struct ind {
int lin, col;
}coada[40001];;

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};

using namespace std;

int main() {
    FILE *fin, *fout;
    int n, m, lc, cc, i, st, dr, 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;
           }
            }
            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;
        }

    st=dr=1;
    coada[1].lin=pfy;
    coada[1].col=pfx;
    b[pfy][pfx]=1;
    while(st<=dr) {
        for(i=0;i<8;i++) {
                if(b[coada[st].lin+linie[i]][coada[st].col+colo[i]]==0) {
                        dr++;
              coada[dr].lin=coada[st].lin+linie[i];
              coada[dr].col=coada[st].col+colo[i];
              b[coada[dr].lin][coada[dr].col]=b[coada[st].lin][coada[st].col]+1;
                }
        }
        st++;
    }
     st=dr=1;
    coada[1].lin=piy;
    coada[1].col=pix;
    a[piy][pix]=1;
    while(st<=dr) {
        for(i=0;i<8;i++) {
                if(a[coada[st].lin+linie[i]][coada[st].col+colo[i]]==0) {
                        dr++;
              coada[dr].lin=coada[st].lin+linie[i];
              coada[dr].col=coada[st].col+colo[i];
              a[coada[dr].lin][coada[dr].col]=a[coada[st].lin][coada[st].col]+1;
                }
        }
        st++;
    }

    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];
                                linn=i;
                                coll=j;
                         }
                    }
            }
    }
    fprintf( fout, "%d %d %d", min, linn, coll);
     fclose( fin );
     fclose( fout );
        return 0;
}