Cod sursa(job #2503918)

Utilizator AlexNic_Nicula Dan Alexandru AlexNic_ Data 3 decembrie 2019 22:22:20
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("rj.in");
ofstream out("rj.out");

int r[102][102] , ju[102][102] , a , b;

struct ura{

   int l , c;
};
ura coada[100001];

int main()
{

    int n,c,x,y,m,i,j,romeol,romeoc,jull, julc , tmin=2101010;
    char lit;
    in>>n>>m;
    in.get(lit);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            in.get(lit);
            if(lit==' '){
                r[i][j]=0;
                ju[i][j]=0;
            }
            if(lit=='X'){
                r[i][j]=-1;
                ju[i][j]=-1;
            }
            if(lit=='R'){
                romeol=i;
                romeoc=j;
                r[i][j]=0;
                ju[i][j]=0;

            }
            if(lit=='J'){
                jull=i;
                julc=j;
                r[i][j]=0;
                ju[i][j]=0;
            }
        }
        in.get(lit);
    }



    for(int i=0;i<=n;i++){
        r[i][0]=-1;
        r[i][n+1]=-1;
        r[0][i]=-1;
        r[n+1][i]=-1;
        ju[i][0]=-1;
        ju[i][n+1]=-1;
        ju[0][i]=-1;
        ju[n+1][i]=-1;

    }

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


    int sf=1, inc=1, lin, col;
    coada[1].l=romeol;
    coada[1].c=romeoc;
    while(inc<=sf){
        for(i=0;i<4;i++){
            lin=coada[inc].l+dirl[i];
            col=coada[inc].c+dirc[i];
            if(r[lin][col]==0){
                sf++;
                coada[sf].l=lin;
                coada[sf].c=col;
                r[lin][col]=r[coada[inc].l][coada[inc].c]+1;
            }
        }
        inc++;
    }
    sf=1, inc=1, lin, col;
    coada[1].l=jull;
    coada[1].c=julc;
    while(inc<=sf){
        for(i=0;i<4;i++){
            lin=coada[inc].l+dirl[i];
            col=coada[inc].c+dirc[i];
            if(ju[lin][col]==0){
                sf++;
                coada[sf].l=lin;
                coada[sf].c=col;
                ju[lin][col]=ju[coada[inc].l][coada[inc].c]+1;
            }
        }
        inc++;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(r[i][j]==ju[i][j] && r[i][j]<tmin && r[i][j]!=0 && r[i][j]!=-1){
                a=i;
                b=j;
                tmin=r[i][j];
            }

        }
    }
    out<<tmin<<" "<<a<<" "<<b;
    return 0;
}