Cod sursa(job #2547156)

Utilizator Sorin123-21Enachioiu Sorin-Catalin Sorin123-21 Data 15 februarie 2020 07:58:07
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.74 kb
#include <iostream>
#include <fstream>

using namespace std;

struct point{
    int lin;
    int col;
};

int n,m;
int prim=0, ultim=0;
int prim2=0, ultim2=0;
int lenMax=n*m;
point coada[10001];
point p_inceput, p_final;
int dlin[4]={-1,0,1,0};
int dcol[4]={0,1,0,-1};
int v[101][101];
int v2[101][101];

bool check(int i, int j){
    return i>=0&&j>=0&&i<n&&j<m;
}
void enque(point x){
    coada[++ultim]=x;
};

point pop(){
    point x=coada[prim++];
    return x;
};


int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    string line;
    fin>>n>>m;
    getline(fin,line);
    point R, J;
    for(int i=0; i<n; i++){
        //string line;
        getline(fin,line);
        for(int j=0; j<m; j++){
            char c = line[j];
            if(c=='R'){
                R.lin=i;
                R.col=j;
                v[i][j]=0;
                v2[i][j]=0;
            } else if(c=='J'){
                J.lin=i;
                J.col=j;
                v[i][j]=0;
                v2[i][j]=0;

            } else if(c=='X'){
                v[i][j]=-1;
                v2[i][j]=-1;
            } else if(c==' '){
                v[i][j]=0;
                v2[i][j]=0;
            }
            //fin>>v[i][j];

        }
    }

    coada[0]=R;
    v[R.lin][R.col]=1;
    while(prim<=ultim){
        point p=coada[prim++];
        for(int k=0; k<4; k++){
            point vecin;
            vecin.lin=p.lin+dlin[k];
            vecin.col=p.col+dcol[k];
            if(check(vecin.lin, vecin.col)&&v[vecin.lin][vecin.col]==0){
                v[vecin.lin][vecin.col]=v[p.lin][p.col]+1;
                //enque(vecin);
                coada[++ultim]=vecin;
            }
        }
    }
    //prim=0, ultim=0;
    coada[0]=J;
    v2[J.lin][J.col]=1;
    while(prim2<=ultim2){
        point p=coada[prim2++];
        for(int k=0; k<4; k++){
            point vecin;
            vecin.lin=p.lin+dlin[k];
            vecin.col=p.col+dcol[k];
            if(check(vecin.lin, vecin.col)&&v2[vecin.lin][vecin.col]==0){
                v2[vecin.lin][vecin.col]=v2[p.lin][p.col]+1;
                //enque(vecin);
                coada[++ultim2]=vecin;
            }
        }
    }

    //printArr1();
    //cout<<endl<<endl;
    //printArr2();
    point minim;
    int minimPasi=1000000;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            if(v[i][j]==v2[i][j]&&v[i][j]>0&&v[i][j]<minimPasi){
                //fout<<v[i][j]-1<<' '<<i+1<<' '<<j+1;
                minimPasi=v[i][j];
                minim.lin=i+1;
                minim.col=j+1;
            }
        }
    }
    fout<<minimPasi-1<<' '<<minim.lin<<' '<<minim.col;
    return 0;

}