Cod sursa(job #2307188)

Utilizator NOSCOPEPROKENDYMACHEAMACUMVREAU NOSCOPEPROKENDY Data 23 decembrie 2018 22:21:34
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.67 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;

}