Cod sursa(job #1970666)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 19 aprilie 2017 15:22:38
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.46 kb
#include<fstream>
using namespace std;
ifstream in ("rj.in" );
ofstream out("rj.out");
short n, m, i ,j,dr,a,b,c,d,st,alfa,beta, minim,x,y,ok;
short dx[9] = { 0,0,0,1,-1,1,1,-1,-1},dy[9] = { 0,1,-1,0, 0,1,-1,-1,1};
char cha[105][105];
short matrom[105][105], matjul[105][105];
pair<short,short>v[10005];
int main(){
    in >> n >> m;

    in.getline( cha[0] + 1, 105 );
    for(  i = 1; i <= n; i ++ ) {
        in.getline( cha[i] + 1, 105 );

    }
    for( i = 1; i <= n; i ++ ){
        for( j = 1; j <= m; j ++ ){
            if( cha[i][j] == 'R' ){
                matrom[i][j] = 1;
                dr ++;
                v[dr].first = i;
                v[dr].second = j;
            }
            if( cha[i][j] == 'J'){
                 x = i;
                 y = j;
            }
            if( cha[i][j] == 'X' ){
                matrom[i][j] = -1;
                matjul[i][j] = -1;
            }
        }

    }
    for( st = 1; st <= dr; st ++ ){
        for( i = 1; i <= 8; i ++ ){
            a = v[st].first;
            b = v[st].second;
            c = a + dx[i];
            d = b + dy[i];
            if( c <= n && d <= m && c >= 1 && d >= 1 && matrom[c][d] == 0 ){
                dr ++;
                v[dr].first = c;
                v[dr].second = d;
                matrom[c][d] = matrom[a][b] + 1;
            }
        }
    }
    dr = 1;
    v[dr].first = x;
    v[dr].second = y;
    matjul[x][y] = 1;
    for( st = 1; st <= dr; st ++ ){
        for( i = 1; i <= 8; i ++ ){
            a = v[st].first;
            b = v[st].second;
            c = a + dx[i];
            d = b + dy[i];
            if( c <= n && d <= m && c >= 1 && d >= 1 && matjul[c][d] == 0 ){
                dr ++;
                v[dr].first = c;
                v[dr].second = d;
                matjul[c][d] = matjul[a][b] + 1;
            }
        }
    }
    for( i = 1; i <= n; i ++ ){
        for( j = 1; j <= m; j ++ ){
            if( matjul[i][j] == matrom[i][j]&& matjul[i][j] > 0 ){
                if( ok == 0 ){
                    ok = 1;
                    minim = matjul[i][j];
                    alfa = i;
                    beta = j;
                }
                if( matjul[i][j] < minim ){
                    minim = matjul[i][j];
                    alfa = i;
                    beta = j;
                }
            }
        }
    }
    out << minim <<" " << alfa <<" "<<beta;
    return 0;
}