Cod sursa(job #2667996)

Utilizator DeliaGhergheGherghe Ioana-Delia DeliaGherghe Data 4 noiembrie 2020 11:50:13
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

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

int N, M, MR[101][101], MJ[101][101], iJ, jJ, iR, jR;
queue < pair <int, int> > q;

bool ok(int i, int j)
{
    if (i < 1 || j < 1 || i > N || j > M )
        return false;
    return true;
}

void Lee(int a[101][101])
{
    while (!q.empty())
    {
        int x = q.front().first;
        int y = q.front().second;

        q.pop();

        for (int p = 0; p < 8; p++)
        {
            int i = x + di[p];
            int j = y + dj[p];

            if (ok(i,j) && a[i][j] != -1 && a[x][y] + 1 < a[i][j] )
            {
                a[i][j] = a[x][y] + 1;
                q.push({i,j});
            }

        }

    }
}

int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");

    fin >> N >> M;
    int i,j, tmin = 10001, soli, solj;
    char s[101];
    fin.get();

    for (i = 1; i <= N; i++)
       {
           fin.getline(s,101);
           for (j = 0; j < M; j++)
    {
        cout << s[j];

        if (s[j] == 'R')
        {
            iR = i;
            jR = j+1;
            MJ[i][j+1] = 10001;
        }
        else if (s[j] == 'J')
        {
            iJ = i;
            jJ = j+1;
            MR[i][j+1] = 10001;
        }
        else if (s[j] == 'X')
        {
            MR[i][j+1] = -1;
            MJ[i][j+1] = -1;
        }
        else
        {
            MR[i][j+1] = 10001;
            MJ[i][j+1] = 10001;
        }
    }
    cout << endl;
}

    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= M; j++)
            cout << MR[i][j] << " ";
        cout << endl;
    }

    cout << endl;

    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= M; j++)
            cout << MJ[i][j] << " ";
        cout << endl;
    }

    q.push({iR, jR});
    Lee(MR);

    q.push({iJ, jJ});
    Lee(MJ);

    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= M; j++)
            cout << MR[i][j] << " ";
        cout << endl;
    }

    cout << endl;

    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= M; j++)
            cout << MJ[i][j] << " ";
        cout << endl;
    }

    for (i = 1; i <= N; i++)
        for (j = 1; j <= M; j++)
        if (MR[i][j] == MJ[i][j] && MR[i][j] != -1 && MR[i][j] < tmin)
    {
        tmin = MR[i][j];
        soli = i;
        solj = j;
    }

    cout << tmin + 1<< " " << soli << " " << solj;

    fin.close();
    fout.close();
    return 0;
}