Cod sursa(job #1561602)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 4 ianuarie 2016 12:20:13
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <queue>
#define POM -1
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
queue<pair<int, int> > q;
const int MAX =105;
int n, m;
int ro[MAX][MAX], ju[MAX][MAX];
int xj, yj, xr, yr;
int dx[]={ 0, 1, -1, 0,  1, 1, -1, -1};
int dy[]={-1, 0,  0, 1, -1, 1,  1, -1};
void lee(int x, int y, int a[][MAX])
{
    q.push({x, y});
    a[x][y] = 1;
    while(!q.empty())
    {
        x = q.front().first;
        y = q.front().second;
        q.pop();
        for(int d=0; d<8; ++d)
            if(a[ x+dx[d] ][ y+dy[d] ] == 0)
            {
                q.push({x+dx[d], y+dy[d]});
                a[ x+dx[d] ][ y+dy[d] ] = 1 + a[x][y];
            }
    }
}
int main()
{
    cin>>n>>m;
    cin.get();
    for(int i=1; i<=n; ++i)
    {
        char s[MAX];
        cin.getline(s+1, MAX - 1);
        for(int j=1; s[j]; ++j)
        {
            if(s[j] == 'X')
                ro[i][j] = ju[i][j] = POM;
            if(s[j] == 'R'){xr = i; yr = j;}
            if(s[j] == 'J'){xj = i; yj = j;}
        }
        ro[i][0] = ro[i][m+1] = ju[i][0] = ju[i][m+1] = POM;
    }
    for(int i=0; i<=m+1; ++i)
        ro[0][i] = ju[0][i] = ro[n+1][i] = ju[n+1][i] = POM;
    lee(xr, yr, ro);
    lee(xj, yj, ju);
    int x, y, mini = MAX*MAX;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j)
            if(ro[i][j] > 0 and ro[i][j] == ju[i][j] and ro[i][j] < mini)
            {
                mini = ro[i][j];
                x = i;
                y = j;
            }
    cout<<mini<<' '<<x<<' '<<y;
    return 0;
}