Cod sursa(job #2140721)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 23 februarie 2018 20:03:57
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include<bits/stdc++.h>

using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
bool v[105][105];
int ro[105][105],ju[105][105],n,m;
int diri[] = {1,-1,0,0};
int dirj[] = {0,0,1,-1};

bool ok1(int i, int j)
{
    return (!ro[i][j] && !v[i][j] && i>=1 && i<=n && j>=1 && j<=m);
}

bool ok2(int i, int j)
{
    return (!ju[i][j] && !v[i][j] && i>=1 && i<=n && j>=1 && j<=m);
}

int main()
{
    char x;
    int x1,y1,x2,y2;
    in >> n >> m;
    for (int i = 1; i<=n; i++)
    {
        for (int j = 1; j<=m; j++)
        {
            in.get(x);
            if (x == '\n')
            {
                if (j == m)
                    continue;
                else
                    in.get(x);
            }
            if (x == 'R')
            {
                x1 = i;
                y1 = j;
                v[i][j] = 1;
            }
            else if (x == 'J')
            {
                x2 = i;
                y2 = j;
                v[i][j] = 1;
            }
            else if (x == 'X')
                v[i][j] = 1;
        }
    }
    queue< pair<int,int> > Q;
    Q.push(make_pair(x1,y1));
    ro[x1][y1] = 1;
    while (!Q.empty())
    {
        int i = Q.front().first;
        int j = Q.front().second;
        for (int k = 0; k<4; k++)
        {
            int i2 = i+diri[k];
            int j2 = j+dirj[k];
            if (ok1(i2,j2))
            {
                ro[i2][j2] = 1+ro[i][j];
                Q.push(make_pair(i2,j2));
            }
        }
        Q.pop();
    }
    Q.push(make_pair(x2,y2));
    ju[x2][y2] = 1;
    while (!Q.empty())
    {
        int i = Q.front().first;
        int j = Q.front().second;
        for (int k = 0; k<4; k++)
        {
            int i2 = i+diri[k];
            int j2 = j+dirj[k];
            if (ok2(i2,j2))
            {
                ju[i2][j2] = 1+ju[i][j];
                Q.push(make_pair(i2,j2));
            }
        }
        Q.pop();
    }
    int Min = n*m+1,xr,yr;
    for (int i = 1; i<=n; i++)
        for (int j = 1; j<=m; j++)
            if (ro[i][j] == ju[i][j] && ro[i][j]<Min && ro[i][j]>0)
            {
                Min = ro[i][j];
                xr = i;
                yr = j;
            }
    out << Min-1 << " " << xr << " " << yr;
}