Cod sursa(job #2326839)

Utilizator StefanZamfirStefan Zamfir StefanZamfir Data 24 ianuarie 2019 08:49:10
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>

using namespace std;
int n,m;
int tmin=9999,r_i,r_j,j_i,j_j,t_i,t_j;
int r_m[100][100],j_m[100][100];
char sir[101];

inline void lee(int si,int sj, int in_m[][100]) {
    int dx[]= {0,0,1,-1,1,-1,1,-1},dy[]= {1,-1,0,0,1,1,-1,-1};
    queue<int> qx,qy;
    in_m[si][sj]=1;
    qx.push(si);
    qy.push(sj);
    int x,y,_x,_y;
    while(!qx.empty()&&!qy.empty()) {
        x=qx.front();
        y=qy.front();
        qx.pop();
        qy.pop();
        for(int i=0; i<8; ++i) {
            _x=x+dx[i];
            _y=y+dy[i];
            if(_x>=0&&_y>=0&&_x<=n&&_y<=m&&in_m[_x][_y]==0) {
                in_m[_x][_y]=in_m[x][y]+1;
                qx.push(_x);
                qy.push(_y);
            }
        }
    }

}


int main() {
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    cin >> n >> m;
    cin.get();
    for(int i=0; i<n; ++i) {
        cin.getline(sir,101);
        for(int j=0; j<strlen(sir); ++j) {
            if(sir[j]=='X') {
                r_m[i][j]=-1;
                j_m[i][j]=-1;
            } else if(sir[j]=='R') {
                r_i=i;
                r_j=j;
            } else if(sir[j]=='J') {
                j_i=i;
                j_j=j;
            }
        }
    }
    lee(r_i,r_j,r_m);
    lee(j_i,j_j,j_m);
    for(int i=0; i<n; ++i)
        for(int j=0; j<m; ++j)
            if(r_m[i][j]==j_m[i][j]&&r_m[i][j]>0)
                if(r_m[i][j]<tmin) {
                    tmin = r_m[i][j];
                    t_i=i;
                    t_j=j;
                }
    cout << tmin << ' ' << t_i+1 << ' ' << t_j+1;

    return 0;
}