Cod sursa(job #2151189)

Utilizator Gl0WCula Stefan Gl0W Data 4 martie 2018 11:07:09
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include <fstream>

using namespace std;

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

char s[103];
int n, m, v[104][104], ri, rj, ji, jj, c1[2][10004], p1, u1, ic, jc, iv, jv, c2[2][10004], w[104][104], p2, u2, poz1 = 300, poz2 = 300, nr, sol, minim = 3000000;
int d1[] = {-1, 1, 0, 0, 1, -1, -1, 1};
int d2[] = {0, 0, -1, 1, 1, 1, -1, -1};
int main()
{
    fin>>n>>m;
    for(int i = 0; i <= n; i++){
        fin.getline(s, 103);
        for(int j = 0; j < m; j++){
            if(s[j] == ' '){
                v[i][j + 1] = 0;
                w[i][j + 1] = 0;
            }
            if(s[j] == 'X'){
                v[i][j + 1] = -1;
                w[i][j + 1] = -1;
            }
            if(s[j] == 'R'){
                v[i][j + 1] = 1;
                ri = i;
                rj = j + 1;
            }
            if(s[j] == 'J'){
                w[i][j + 1] = 1;
                ji = i;
                jj = j + 1;
            }
        }

    }
    c1[0][1] = ri;
    c1[1][1] = rj;
    p1 = 1; u1 = 1;
    while(p1 <= u1){
        ic = c1[0][p1];
        jc = c1[1][p1];
        for(int d = 0; d <= 7; d++){
            iv = ic + d1[d];
            jv = jc + d2[d];
            if(iv >= 1 && iv <= n && jv >= 1 && jv <= m && v[iv][jv] == 0){
                u1++;
                c1[0][u1] = iv;
                c1[1][u1] = jv;
                v[iv][jv] = 1 + v[ic][jc];
                if(iv == ji && jv == jj){
                    p1 = u1 + 100;
                }
            }
        }
        p1++;
    }
    c2[0][1] = ji;
    c2[1][1] = jj;
    p2 = 1; u2 = 1;
    while(p2 <= u2){
        ic = c2[0][p2];
        jc = c2[1][p2];
        for(int d = 0; d <= 7; d++){
            iv = ic + d1[d];
            jv = jc + d2[d];
            if(iv >= 1 && iv <= n && jv >= 1 && jv <= m && w[iv][jv] == 0){
                u2++;
                c2[0][u2] = iv;
                c2[1][u2] = jv;
                w[iv][jv] = 1 + w[ic][jc];
                if(iv == ri && jv == rj){
                    p2 = u2 + 100;
                }
            }
        }
        p2++;
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(w[i][j] == v[i][j] && w[i][j] > 0){
                if(minim > w[i][j]){
                    minim = w[i][j];
                    poz1 = i;
                    poz2 = j;
                }
            }
        }
    }
    fout<<minim<<" "<<poz1<<" "<<poz2;
    return 0;
}