Cod sursa(job #2667908)

Utilizator bogdan.gusuleacGusuleac Bogdan bogdan.gusuleac Data 4 noiembrie 2020 01:52:19
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.66 kb
#include <fstream>
#include <iostream>
#include <queue>

#define MAXVALUE 110
#define MINIVALUE 100010

using namespace std;

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

int R[MAXVALUE][MAXVALUE], J[MAXVALUE][MAXVALUE]; ///matrix J,R
int xPos[8] = {0,-1,-1,-1,0,1,1,1}, yPos[8] = {-1,-1,0,1,1,1,0,-1};

void lee(int mat[][MAXVALUE], int line, int column)
{

    pair<int,int> elem;
    pair<int,int> v;
    queue<pair<int,int>> q;

    q.push(make_pair(line, column));

    while(!q.empty())
    {
        elem = q.front();
        q.pop();
        for (int i=0; i < 8; i++)
        {
            v.first = elem.first + xPos[i];
            v.second = elem.second + yPos[i];

            if (mat[v.first][v.second] == 0)
            {
                q.push(v);
                mat[v.first][v.second] = mat[elem.first][elem.second] + 1;
            }
        }
    }
}

int main()
{
    int width, height;
    f>>width>>height;
    //f.get();

    ///margini -1
    for (int i=0; i <= width + 1; i++)
    {
        R[i][0] =-1;
        J[i][0] = -1;
        R[i][height + 1] = -1;
        J[i][height + 1] = -1;
    }

    for (int j=0; j <= height + 1; j++)
    {
        R[0][j] = -1;
        J[0][j] = -1;
        R[width + 1][j] = -1;
        J[width + 1][j] = -1;
    }

    char s[105]; ///buffer
    int xR = 0,yR = 0, xJ = 0,yJ = 0;


    for (int i = 1; i <= width; i++)
    {
        //f.getline(s,105);
        //cout<<i<<" "<<s<<"\n";
        for (int j=0; j < height; j++)
        {
            if (s[j] == 'X')
            {
                R[i][j+1] = -1;
                J[i][j+1] = -1;
                ///pun -1 pe unde nu se poate trece
            }

            if (s[j] == 'R')
            {
                ///pun 1 pt Romeo in R
                R[i][j+1] = 1;
                xR = i;
                yR = j+1;
            }

            if (s[j] == 'J')  ///pun 1 in matricea julietei unde am j
            {
                ///pun 1 pt Julieta in J
                J[i][j+1] = 1;
                xJ = i;
                yJ = j+1;
            }


        }
        s[0] = '\0';
    }
    //cout<<xR<<" "<<yR<<" "<<xJ<<" "<<yJ<<"\n";
    lee(R,xR,yR);
    lee(J,xJ,yJ);

    int minim = MINIVALUE;
    int xMin = 0, yMin = 0;

    for(int i = 1; i <= width; i++)
    {
        for (int j = 1; j <= height; j++)
        {
            if (R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < minim)
            {
                minim = R[i][j];
                xMin = i;
                yMin = j;
            }
        }
    }

    g<<minim<<" "<<xMin<<" "<<yMin;

    return 0;
}