Cod sursa(job #2653607)

Utilizator DarkwarriorRobert Gaspar Darkwarrior Data 28 septembrie 2020 17:07:56
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <iostream>
#include <queue>
#include <fstream>
#include <climits>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int NMAX=180;
char strng[NMAX][NMAX];
int a[NMAX][NMAX],b[NMAX][NMAX],n,m,mini=INT_MAX,minix,miniy;
int di[8]={-1,-1,0,1,1,1,0,-1};
int dj[8]={0,1,1,1,0,-1,-1,-1};
void read(){
    f>>n>>m;
    for(int i=0;i<=n;i++){
        f.getline(strng[i],NMAX,'\n');
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(strng[i][j]==' '){a[i][j]=0;b[i][j]=0;}
            else if(strng[i][j]=='X'){a[i][j]=-1;b[i][j]=-1;}
            }
        cout<<"\n";
    }
    for(int i=0;i<=n+1;i++){
        a[i][m+1]=-1;
        a[i][0]=-1;
    }
    for(int i=0;i<=m+1;i++){
        a[n+1][i]=-1;
        a[0][i]=-1;
    }
    for(int i=0;i<=n+1;i++){
        b[i][m+1]=-1;
        b[i][0]=-1;
    }
    for(int i=0;i<=m+1;i++){
        b[n+1][i]=-1;
        b[0][i]=-1;
    }
}
pair<int,int> rj(char src){
    for(int i=1;i<n;i++){
        for(int j=1;j<=m;j++){
            if(strng[i][j]==src){
                pair<int,int> coord;
                coord={i,j};
                return coord;
            }
        }
    }
}
void lee(pair<int,int> coord, char tip){
    int x1=coord.first;
    int y1=coord.second;
    if(tip='R')
    a[x1][y1]=1;
    else
    b[x1][y1]=1;
    queue<pair<int,int> > q;
    q.push({x1,y1});
    while(!q.empty()){
        int x,y;
        x=q.front().first, y=q.front().second;
        q.pop();
        for(int d=0;d<8;d++){
            if(tip=='R')
                if(a[x+di[d]][y+dj[d]]==0){
                    q.push({x+di[d],y+dj[d]});
                    a[x+di[d]][y+dj[d]]=a[x][y]+1;
                }
            else
                if(b[x+di[d]][y+dj[d]]==0){
                    q.push({x+di[d],y+dj[d]});
                    b[x+di[d]][y+dj[d]]=b[x][y]+1;
                }
        }
    }
}
int main()
{
    read();
    lee(rj('R'),'R');
    lee(rj('J'),'J');
    for(int j=1;j<=m;j++){
        for(int i=1;i<=n;i++){
            if(a[i][j]==b[i][j]&&a[i][j]!=-1&&a[i][j]<mini){mini=a[i][j];minix=i;miniy=j;}
        }
    }
    cout<<mini<<" "<<minix<<" "<<miniy;
    return 0;
}