Cod sursa(job #3240678)

Utilizator Mateixx1Trandafir matei Mateixx1 Data 19 august 2024 18:29:29
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");
const int dl[]= {1,-1,0,0,1,-1,-1,1};
const int dc[]= {0,0,1,-1,1,-1,1,-1};
int n,m,v[103][103],d[103][103],xi,yi,xs,ys,minim=11000,xq,yq;
char c;

bool verificare(int i,int j) {
    return 1<=i&&i<=n&&1<=j&&j<=m;
}

void Lee(int xince,int yince,int vec[103][103]) {
    queue<pair<int,int>> q;
    q.push(make_pair(xince,yince));
    vec[xince][yince]=1;
    while(!q.empty()) {
        int i=q.front().first;
        int j=q.front().second;
        for(int k=0; k<8; k++) {
            int iv=i+dl[k];
            int jv=j+dc[k];
            if(verificare(iv,jv)&&vec[iv][jv]==0) {
                vec[iv][jv]=1+vec[i][j];
                q.push(make_pair(iv,jv));
            }
        }
        q.pop();
    }
}


int main() {
    f>>n>>m;
    f.get();
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            f.get(c);
            if(c!=' ') {
                v[i][j]=1;
                d[i][j]=1;
                if(c=='R') {
                    xi=i;
                    yi=j;
                    v[i][j]=0;
                    d[i][j]=0;
                }
                if(c=='J') {
                    xs=i;
                    ys=j;
                    v[i][j]=0;
                    d[i][j]=0;
                }
            }
        }
        f.get();
    }
    Lee(xi,yi,v);
    Lee(xs,ys,d);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(v[i][j]==d[i][j]){
                if(v[i][j]!=1&&v[i][j]!=0&&v[i][j]<minim){
                    minim=v[i][j];
                    xq=i;
                    yq=j;
                }
            }
        }

    }
    g<<minim<<" "<<xq<<" "<<yq<<" ";
    f.close();
    g.close();
    return 0;
}