Cod sursa(job #2359071)

Utilizator AsmarandeiCatalinAsmarandei Catalin AsmarandeiCatalin Data 28 februarie 2019 16:31:12
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <fstream>
#include <queue>

using namespace std;

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

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

int v[105][105],x[105][105],n,m;
int ri,rj,ji,jj,soli = 1,solj = 1;
char l[105];

queue<pair<int,int> > coada;
void citire()
{
    f1>> n >> m;
    f1.get();
    for(int i = 1; i <= n; i++)
    {
        f1.getline(l, 102);
        for(int j = 0; j < m; j++)
        {
            if(l[j] == 'R')
            {
                ri = i;
                rj = j + 1;
            }
            else if(l[j] == 'J')
            {
                ji = i;
                jj = j +1;
            }
            else if(l[j] == 'X')
            {
                v[i][j + 1] = -1;
                x[i][j + 1] = -1;
            }
        }
    }
}
bool ok(int a[105][105], int i, int j)
{
    if(i < 1 || j < 1 || i > n|| j > n)
        return false;
    if(a[i][j] == -1)
        return false;
    return true;
}
void lee(int a[105][105],int starti,int startj)
{
    int i,j,i_urma,j_urma;
    a[starti][startj] = 1;
    coada.push(make_pair(starti,startj));
    while((!coada.empty()))
    {
        i = coada.front().first;
        j = coada.front().second;
        coada.pop();
        for(int dir = 0; dir < 8; ++dir)
        {
            i_urma = i + di[dir];
            j_urma = j + dj[dir];
            if(ok(a,i_urma,j_urma) && a[i_urma][j_urma] ==0)
            {
                a[i_urma][j_urma] = a[i][j] + 1;
                coada.push(make_pair(i_urma,j_urma));
            }
        }

    }

}

int main()
{
    citire();
    lee(v,ri,rj);
    lee(x,ji,jj);
//    for(int i = 1; i <= n; ++i)
//    {
//        for(int j = 1; j <= m; ++j)
//            f2 << v[i][j] << ' ';
//        f2 << '\n';
//    }
    int tmin = 102*102 ;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= m; ++j)
            if(v[i][j] == x[i][j] && v[i][j] > 0  && tmin  > x[i][j])
                soli = i, solj = j, tmin = v[i][j];
    }
    f2 << tmin << ' '<< soli << ' ' << solj;
    return 0;
}