Cod sursa(job #2567583)

Utilizator mirceaisherebina mircea mirceaishere Data 3 martie 2020 17:54:16
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <fstream>
#include <cstdio>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

int n, m, i, j, a[110][110], is1, js1, is2, js2, sol, isol, jsol;
int rom[110][110], juli[110][110], c[2][10010];
int p, u, ic, jc, iv, jv, d;
char ch[110];
int di[8]={1, 1, 1, 0, 0, -1, -1, -1};
int dj[8]={1, 0, -1, 1, -1, 1, 0, -1};


int main(){
    fin>>n>>m;
    sol=1000000000;
    fin.get();
    for(i=1; i<=n; i++){
        fin.getline(ch, 105);
        for(j=0; j<m; j++){
            if(ch[j]=='X'){
                a[i][j+1]=-1;
            }
            if(ch[j]=='R'){
                is1=i;
                js1=j+1;
            }
            if(ch[j]=='J'){
                is2=i;
                js2=j+1;
            }
        }
    }
    p=1;
    u=1;
    c[0][1]=is1;
    c[1][1]=js1;
    rom[is1][js1]=1;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        for(d=0; d<8; d++){
            iv=ic+di[d];
            jv=jc+dj[d];
            if(rom[iv][jv]==0 && a[iv][jv]!=-1 && iv>0 && iv<=n && jv>0 && jv<=m){
                rom[iv][jv]=rom[ic][jc]+1;
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
            }
        }
        p++;
    }
    p=1;
    u=1;
    c[0][1]=is2;
    c[1][1]=js2;
    juli[is2][js2]=1;
    while(p<=u){
        ic=c[0][p];
        jc=c[1][p];
        for(d=0; d<8; d++){
            iv=ic+di[d];
            jv=jc+dj[d];
            if(juli[iv][jv]==0 && a[iv][jv]!=-1 && iv>0 && iv<=n && jv>0 && jv<=m){
                juli[iv][jv]=juli[ic][jc]+1;
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
            }
        }
        p++;
    }
    for(i=1; i<=n; i++){
        for(j=1; j<=m; j++){
            if(a[i][j]!=-1 && juli[i][j]>0 && rom[i][j]>0 && rom[i][j]==juli[i][j]){
                if(rom[i][j]<sol || ((rom[i][j]==sol&&i<isol)||(rom[i][j]==sol && i==isol && j<jsol)) ){
                    sol=rom[i][j];
                    isol=i;
                    jsol=j;
                }
            }
        }
    }
    fout<<sol<<" "<<isol<<" "<<jsol;
}