Cod sursa(job #2487435)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 4 noiembrie 2019 19:26:17
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <cstring>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n, m, rx, ry, jx, jy, i, j, minim, ii, jj;
int a[110][110], r[110][110], ju[110][110], d[2][11000], init[110][110];
char car, s[110];

int dx[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
int dy[] = { -1, 0, 1, 1, 1, 0, -1, -1 };

void lee ( int xs, int ys, int mat[110][110] ){
    int l=0, c=1, p=1, u=1;
    for ( i=1; i <= n; i++ )
        for ( j=1; j <= m; j++ )
            a[i][j] = init[i][j];
    d[l][p] = xs;
    d[c][p] = ys;
    a[xs][ys] = 1; mat[xs][ys] = 1;
    while ( p <= u ){
        int ic = d[l][p];
        int jc = d[c][p];
        for ( int crt = 0; crt < 8; crt++ ){
            int iv = ic + dx[crt];
            int jv = jc + dy[crt];
            if ( !a[iv][jv] && iv && jv && iv <= n && jv <= m ){
                d[l][++u] = iv;
                d[c][u] = jv;
                mat[iv][jv] = mat[ic][jc]+1;
                a[iv][jv] = 1;
            }
        }
        p++;
    }
}

int main()
{
    f>>n>>m; f.get();
    for ( i=1; i <= n; i++ ){
        f.getline(s,101);
        for ( j=1; j <= m; j++ ){
            car = s[j-1];
            if ( car == 'X' ) init[i][j] = -1;
            if ( car == 'R' ) rx = i, ry = j;
            if ( car == 'J' ) jx = i, jy = j;
            a[i][j] = init[i][j];
        }
    }

    lee ( rx, ry, r );
    lee ( jx, jy, ju );

    minim = n*m;
    for ( i=1; i <= n; i++ )
        for ( j=1; j <= m; j++ )
            if ( r[i][j] == ju[i][j] && r[i][j] ){
                if ( r[i][j] < minim )
                    minim = r[i][j],
                    ii = i, jj = j;
            }
    g<<minim<<" "<<ii<<" "<<jj;
    return 0;
}