Cod sursa(job #2151999)

Utilizator fciocanCiocan Florin fciocan Data 5 martie 2018 09:44:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

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

struct str
{
    int a, b;
};

int a[101][101], mp[101][101], n, m, i, j, x, xx, y, yy;

int di[] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[] = {0, 1, 1, 1, 0, -1, -1, -1};

queue <str> Q;

void leer()
{
    int inx, jnx, d;

    Q.push({x, y});
    while(!Q.empty())
    {
        i = Q.front().a;
        j = Q.front().b;
        Q.pop();
        for(d = 0; d < 8; ++d)
        {
            inx = i + di[d];
            jnx = j + dj[d];
            if(a[inx][jnx] != -1 && a[inx][jnx] < 1)
            {
                a[inx][jnx] = a[i][j] + 1;
                Q.push({inx, jnx});
            }
        }
    }
}

int leej()
{
    int inx, jnx, d;

    Q.push({xx, yy});
    while(!Q.empty())
    {
        i = Q.front().a;
        j = Q.front().b;
        Q.pop();
        for(d = 0; d < 8; ++d)
        {
            inx = i + di[d];
            jnx = j + dj[d];
            if(mp[inx][jnx] != -1 && mp[inx][jnx] < 1)
            {
                mp[inx][jnx] = mp[i][j] + 1;
                if(a[inx][jnx] == mp[inx][jnx])
                {
                    g<<mp[inx][jnx]<< ' ' << inx << ' ' << jnx;
                    return 0;
                }
                Q.push({inx, jnx});
            }
        }
    }
    return 0;
}

void bordare()
{
    for(i = 0; i <= n+1; ++i)
        a[i][0] = a[i][m+1] = mp[i][0] = mp[i][m+1] = -1;
    for(j = 1; j <= m; ++j)
        a[0][j] = a[n+1][j] = mp[0][j] = mp[n+1][j] = -1;

}

void citire()
{
    char c[101];

    f>>n>>m;
    f.get();
    for(i = 1; i <= n; ++i)
    {
        f.getline(c, m+1);
        for(j = 0; j < m; ++j)
        {
            if(c[j] == 'X')
                a[i][j+1] = mp[i][j+1] = -1;
            else if(c[j] == 'R')
            {
                a[i][j+1] = 1;
                x = i;
                y = j+1;
            }
            else if(c[j] == 'J')
            {
                mp[i][j+1] = 1;
                xx = i;
                yy = j+1;
            }
        }
    }
}

int main()
{
    citire();
    bordare();
    leer();
    leej();
    return 0;
}