Cod sursa(job #2949942)

Utilizator radu._.21Radu Pelea radu._.21 Data 2 decembrie 2022 13:11:36
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <fstream>
#include <queue>
using namespace std;
int n,m,a[105][105],rom[105][105],jul[105][105];
ifstream fin("rj.in");
ofstream fout("rj.out");
int di[]={-1,-1,0,1,1,1,0,-1};
int dj[]={0,1,1,1,0,-1,-1,-1};
bool inmat(int i,int j){
    return i>=1 && j>=1 && i<=n && j<=m;
}
lee1(int i,int j){
    /// lee pt romeo
    rom[i][j]=1;
    queue<pair<int,int>>Q;
    Q.push(make_pair(i,j));
    while(!Q.empty()){

        for(int ll=0;ll<=7;ll++){
            int inou=di[ll]+Q.front().first;
            int jnou=dj[ll]+Q.front().second;
            if(a[inou][jnou]==0 && rom[inou][jnou]==0 && inmat(inou,jnou)){
                Q.push(make_pair(inou,jnou));
                rom[inou][jnou]=1+rom[Q.front().first][Q.front().second];
            }
        }
        Q.pop();
    }
}
lee2(int i,int j){
    /// lee pt julieta
    jul[i][j]=1;
    queue<pair<int,int>>Q;
    Q.push(make_pair(i,j));
    while(!Q.empty()){

        for(int ll=0;ll<=7;ll++){
            int inou=di[ll]+Q.front().first;
            int jnou=dj[ll]+Q.front().second;
            if(a[inou][jnou]==0 && jul[inou][jnou]==0 && inmat(inou,jnou)){
                Q.push(make_pair(inou,jnou));
                jul[inou][jnou]=1+jul[Q.front().first][Q.front().second];
            }
        }
        Q.pop();
    }
}
char s[105];
int main(){
    int x1,y1,x2,y2;
    fin>>n>>m; fin.get();
    for(int i=1;i<=n;i++){
        fin.getline(s,105);
        for(int j=0;j<m;j++)
            if(s[j]=='R')
                x1=i,y1=j+1;
            else if(s[j]=='J')
                x2=i,y2=j+1;
            else if(s[j]=='X')
                a[i][j+1]=1;

    }
    lee1(x1,y1); lee2(x2,y2); int min0=10000000,rez1,rez2;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++){
        if(rom[i][j]==jul[i][j] && rom[i][j]<min0 && rom[i][j]!=0)
            min0=rom[i][j],rez1=i,rez2=j;
    }
    fout<<min0<<" "<<rez1<<" "<<rez2;




    //cout<<min0<<" "<<rez1<<" "<<rez2;
    return 0;
}