Cod sursa(job #2668548)

Utilizator MARIAN.DANAILADanaila Marian MARIAN.DANAILA Data 5 noiembrie 2020 00:16:35
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include<bits/stdc++.h>
#define N 102
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int romeo[N][N], julieta[N][N],n,m;
queue<pair<int, int>> q;
int x[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int y[8] = {-1, -1, -1, 0, 0, 1, 1, 1};

void bfs(int mat[102][102], int start_x, int start_y){
    int i, next_x, next_y, curr_x, curr_y;
    q.push({start_x, start_y});
    while(!q.empty()){
        curr_x = q.front().first;
        curr_y = q.front().second;
        q.pop();
        for(i=0;i<8;i++){
            next_x = curr_x + x[i];
            next_y = curr_y + y[i];
            if(next_x >= 1 && next_x <= n && next_y >= 1 && next_y <= m){
                if(!mat[next_x][next_y]){
                    mat[next_x][next_y] = mat[curr_x][curr_y] + 1;
                    q.push({next_x, next_y});
                }
            }
        }
    }
}

int main()
{
    int i,j,rx,ry,jx,jy;
    char s[101];
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++){
        fin.getline(s, 101);
        for(j=0;j<m;j++){
            if(s[j] == 'R'){
                romeo[i][j+1] = 1;
                rx = i;
                ry = j+1;
            }
            else if(s[j] == 'J'){
                julieta[i][j+1] = 1;
                jx = i;
                jy = j+1;
            }
            else if(s[j] == 'X'){
                romeo[i][j+1] = -1;
                julieta[i][j+1] = -1;
            }
        }
    }

    bfs(romeo, rx, ry);
    bfs(julieta, jx, jy);

    int ans = 100, meeting_x, meeting_y, found = 0;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(romeo[i][j] == julieta[i][j] && romeo[i][j] < ans && romeo[i][j] > 0){
                ans = romeo[i][j];
                meeting_x = i;
                meeting_y = j;
                found = 1;
                break;
            }
        }
        if(found){
            break;
        }
    }
    cout<<ans<<" "<<meeting_x<<" "<<meeting_y;


    return 0;
}