Cod sursa(job #2774956)

Utilizator David_PildDavid Pild David_Pild Data 13 septembrie 2021 17:53:50
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <queue>
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m;
int a[101][101],b1[101][101],b2[101][101];
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};

bool inmat(int i,int j){
    return i>=1&&j>=1&&i<=n&&j<=m;
}

void lee(int is,int js,int b[][101]){
    queue<pair<int,int>>q;
    b[is][js]=1;
    q.push(make_pair(is,js));
    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop();
        for(int i=0;i<=3;i++){
            int x1=dx[i]+x;
            int y1=dy[i]+y;
            if(inmat(x1,y1)&&a[x1][y1]==0&&b[x1][y1]==0){
                b[x1][y1]=b[x][y]+1;
                q.push(make_pair(x1,y1));
            }
        }
    }
}

char c[101];
int main()
{
    fin>>n>>m;
    int i1,j1,i2,j2;
    fin.get();
    for(int i=1;i<=n;i++){
        fin.getline(c,m+1);
        for(int j=0;c[j];j++){
            if(c[j]=='X') a[i][j+1]=1;
            else if(c[j]=='R'){
                i1=i;j1=j+1;
            }
            else if(c[j]=='J'){
                i2=i;j2=j+1;
            }
        }
    }
    lee(i1,j1,b1);
    lee(i2,j2,b2);
    int is,js,mini=9999999;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(b1[i][j]==b2[i][j]&&b1[i][j]){
                if(b1[i][j]<mini){
                    is=i;js=j;
                    mini=b1[i][j];
                }
            }
        }
    }
    fout<<mini-1<<" "<<is<<" "<<js;
    return 0;
}