Cod sursa(job #2126760)

Utilizator MarcelVargaMarcel Varga MarcelVarga Data 9 februarie 2018 22:26:11
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <queue>
using namespace std;
int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
queue<pair<int,int> >qr,qj;
char c[101];
int ro[101][101],ju[101][101],n,m,x,y,drum=1000000;
ifstream fi("rj.in");
ofstream fo("rj.out");
void romeo(){
int i,j,d,ii,jj;
while(!qr.empty()){
i=qr.front().first;
j=qr.front().second;
qr.pop();
for(d=0;d<8;d++){
    ii=i+dir[d][0];
    jj=j+dir[d][1];
    if(ii>=1 and ii<=n and jj>=1 and jj<=m and ro[ii][jj]==0){
        ro[ii][jj]=ro[i][j]+1;
        qr.push(make_pair(ii,jj));

    }
}
}
}
void julieta(){
int i,j,d,ii,jj;
while(!qj.empty()){
i=qj.front().first;
j=qj.front().second;
qj.pop();
for(d=0;d<8;d++){
    ii=i+dir[d][0];
    jj=j+dir[d][1];
    if(ii>=1 and ii<=n and jj>=1 and jj<=m and ju[ii][jj]==0){
        ju[ii][jj]=ju[i][j]+1;
        qj.push(make_pair(ii,jj));
    }
    }
}
}
int main()
{
    fi>>n>>m;fi.getline(c,101);
    for(int i=1;i<=n;i++) {fi.getline(c,101);
    for(int j=0;j<m;j++){
        if(c[j]==' ') {ro[i][j+1]=0;ju[i][j+1]=0;}
        if(c[j]=='X') {ro[i][j+1]=-1;ju[i][j+1]=-1;}
        if(c[j]=='R') {ro[i][j+1]=1;qr.push(make_pair(i,j+1));}
        if(c[j]=='J') {ju[i][j+1]=1;qj.push(make_pair(i,j+1));}

    }}
    romeo();
    julieta();
    for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
    if(ro[i][j]==ju[i][j] and ro[i][j]!=0 and ro[i][j]!=-1)
    if(ro[i][j]<drum) {drum=ro[i][j];x=i;y=j;}
    fo<<drum<<" "<<x<<" "<<y;
    fi.close();
    fo.close();
    return 0;
}