Cod sursa(job #2135454)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 18 februarie 2018 20:52:37
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m;
int R[105][105], J[105][105];
string s;
int rsx, rsy, jsx, jsy, mini = 0x7fffffff;
int fx, fy;

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

bool OK( int x, int y )
{
    if( x < 1 || y < 1 || x > n || y > m )
        return false;

    return true;
}

void lee( int sx, int sy, int arr[][105] )
{
    queue< pair<int, int> > coada;
    int x, y, xv, yv;

    coada.push( make_pair(sx, sy) );
    while( !coada.empty() )
    {
        x = coada.front().first;
        y = coada.front().second;
        coada.pop();

        for( int i = 0; i <= 3; i++ )
        {
            xv = x + dx[i];
            yv = y + dy[i];

            if( OK( xv, yv ) && arr[xv][yv] == 0 )
            {
                arr[xv][yv] = arr[x][y] + 1;
                coada.push( make_pair(xv, yv) );
            }
        }
    }

}

int main()
{

    in>>n>>m;

    getline( in, s, '\n' );
    for( int i = 1; i <= n; i++ )
    {
        getline( in, s, '\n' );

        for( int j = 0; j < m; j++ )
            if( s[j] == '\0' )
                R[i][j+1] = J[i][j+1] = 0;
            else if( s[j] == 'X' )
                R[i][j+1] = J[i][j+1] = -1;
            else if( s[j] == 'R' )
                R[i][j+1] = 1, rsx = i, rsy = j + 1;
            else if( s[j] == 'J' )
                J[i][j+1] = 1, jsx = i, jsy = j + 1;

    }

    lee( rsx, rsy, R );
    lee( jsx, jsy, J );


    for( int i = 1; i <= n; i++ )
        for( int j = 1; j <= n; j++ )
            if( R[i][j] == J[i][j] && R[i][j] > 0 )
                if( mini > R[i][j] )
                {
                    mini = R[i][j];
                    fx = i;
                    fy = j;
                }

    out<<mini - 1<<" "<<fx<<" "<<fy;

    return 0;
}