Cod sursa(job #2153768)

Utilizator Gl0WCula Stefan Gl0W Data 6 martie 2018 14:01:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include <fstream>
#include <cstring>
using namespace std;

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

int n, m, v[104][104], w[104][104], ri, rj, ji, jj, p1, p2, u1, u2, iv, jv, ic, jc, c1[2][10005], c2[2][10005], nr, poz1, poz2;
char s[104];
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;
    fin.ignore();
    for(int i = 1; i <= n; i++){
        fin.get(s, 102);
        fin.ignore();
        for(int j = 0; j < m; j++){
            if(s[j] == 'X'){
                v[i][j + 1] = -1;
                w[i][j + 1] = -1;
            }
            if(s[j] == ' '){
                v[i][j + 1] = 0;
                w[i][j + 1] = 0;
            }
            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] = v[ic][jc] + 1;
                if(iv == ji && jv == jj){
                    p2 = u2 + 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] = w[ic][jc] + 1;
                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){
                nr = w[i][j];
                poz1 = i;
                poz2 = j;
            }
        }
    }
    fout<<nr<<" "<<poz1<<" "<<poz2;
    return 0;
}