Cod sursa(job #2952771)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 9 decembrie 2022 21:33:33
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m, oras[101][101], mat1[101][101], mat2[101][101], tmin=1e9, x, y;
char s[101];
bool ok;
const int di[]={-1, -1, -1, 0, 1, 1, 1, 0}, dj[]={-1, 0, 1, 1, 1, 0, -1, -1};

void lee(int istart, int jstart, int mat[101][101]){
    queue < pair<int, int> > q;
    q.push(make_pair(istart, jstart));
    mat[istart][jstart]=1;
    while(!q.empty()){
        int i=q.front().first, j=q.front().second;
        for(int k=0; k<8; k++){
            int iv=i+di[k], jv=j+dj[k];
            if(iv>=1 && iv<=n && jv>=1 && jv<=m && oras[iv][jv]==0 && mat[iv][jv]==0){
                mat[iv][jv]=mat[i][j]+1;
                q.push(make_pair(iv, jv));
            }
        }
        q.pop();
    }
}

int main(){
    fin>>n>>m;
    fin.get();
    for(int i=1; i<=n; i++){
        fin.getline(s, sizeof(s));
        for(int j=0; j<m; j++){
            if(s[j]=='R')
                oras[i][j+1]=1;
            if(s[j]=='J')
                oras[i][j+1]=1;
            if(s[j]=='X')
                oras[i][j+1]=-1;
        }
    }
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            if(oras[i][j]==1 && !ok){
                lee(i, j, mat1);
                ok=1;
            }else if(oras[i][j]==1){
                lee(i, j, mat2);
            }
        }
    }
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            if(mat1[i][j]==mat2[i][j] && mat1[i][j]){
                if(mat1[i][j] < tmin){
                    tmin=mat1[i][j];
                    x=i;
                    y=j;
                }
            }
        }
    }
    fout<<tmin<<" "<<x<<" "<<y;
}