Cod sursa(job #1087631)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 19 ianuarie 2014 17:31:41
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#include<fstream>

using namespace std;

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

struct poz{ short int l, c; };
poz Q[10000];
short int dl[4] = { -1, 0, 0, 1 };
short int dc[4] = { 0, -1, 1, 0 };
short int R[102][102], J[102][102];

void LEE( short int v[][102] ) {
    int first, last;
    poz p, y;
    first = last = 0;
    while ( first <= last ) {
        p = Q[first]; ++ first;
        for ( int k = 0; k < 4; ++ k ) {
            y.l = p.l + dl[k];
            y.c = p.c + dc[k];
            if ( v[y.l][y.c] == 0 ) {
                Q[++last] = y;
                v[y.l][y.c] = v[p.l][p.c] + 1;
            }
        }
    }
}
int main()
{
    int n, m;
    poz d;
    char c;
    fin>>n>>m;
    fin.get();
    for ( int i = 0; i <= n+1; ++ i )
        R[i][0] = R[i][m+1] = J[i][0] = J[i][m+1] = -1;
    for ( int i = 0; i <= m+1; ++ i )
        R[0][i] = R[n+1][i] = J[0][i] = J[n+1][i] = -1;
    for ( int i = 1; i <= n; ++ i ) {
        for ( int j = 1; j <= m; ++ j ) {
            fin.get(c);
            if ( c == 'R' ) {
                Q[0].l = i;
                Q[0].c = j;
                R[i][j] = 1;
            } else if ( c == 'J' ) {
                d.l = i;
                d.c = j;
                J[i][j] = 1;
            } else if ( c == 'X')
                R[i][j] = J[i][j] =  -1;
        }
        fin.get();
    }
    LEE( R );
    Q[0] = d;
    LEE( J );
    short int mn;
    poz p;
    mn = 1001;
    for ( int i = 1; i <= n; ++ i )
        for ( int j = 1; j <= m; ++ j )
            if ( R[i][j] == J[i][j] && R[i][j] < mn && R[i][j] > 0 ){
                p.l = i;
                p.c = j;
                mn = R[i][j];
            }
    fout<<mn-1<<' '<<p.l<<' '<<p.c<<'\n';
    fin.close();
    fout.close();
    return 0;
}