Cod sursa(job #1900205)

Utilizator nicolaescu.vladNicolaescu Vlad nicolaescu.vlad Data 3 martie 2017 10:53:47
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <fstream>
#include <queue>
#include <algorithm>

using namespace std;

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

int Map1[60][60], Map2[60][60];
int n, m, k, x1, x2, y1, y2;
int di[4];
int dj[4];

queue < pair < int, int > >Queue;

void Read()
{
    f >> n >> m >> k;
    f >> x1 >> x2 >> y1 >> y2;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            f >> Map1[i][j];
}

void Directions()
{
    di[0] = 0; dj[0] = 1; //up
    di[1] = 0; dj[1] = -1; //down
    di[2] = 1; dj[2] = 0; //right
    di[3] = -1; dj[3] = 0; //left
}

void Lee1()
{
    int i, j, i_next, j_next;
    Queue.push(make_pair(x1,x2));
    while (!Queue.empty())
    {
        i = Queue.front().first;
        j = Queue.front().second;
        Queue.pop();
        for (int direction = 0; direction < 4; direction ++)
        {
            i_next = i + di[direction];
            j_next = j + dj[direction];
            if (Map1[i_next][j_next] != 0)
            {
                Map1[i_next][j_next] = Map1[i][j] * Map1[i_next][j_next];
                Queue.push(make_pair(i_next, j_next));
            }
        }
    }
}

void Lee2()
{
    int i, j, i_next, j_next;
    Map2[x1][x2] = 1;
    Queue.push(make_pair(x1,x2));
    while ( !Queue.empty() )
    {
        i = Queue.front().first;
        j = Queue.front().second;
        Queue.pop();
        for (int direction = 0; direction < 4; direction ++)
        {
            i_next = i + di[direction];
            j_next = j + dj[direction];
            if ( Map1[i_next][j_next] != 0 && Map2[i_next][j_next]<1 )
            {
                Map2[i_next][j_next] = Map2[i][j] + 1;
                Queue.push(make_pair(i_next, j_next));
            }
        }
    }
}

/*void Check()
{
    if (Map1[y1][y2]%k == 0)
        g << Map2[y1][y2];
}*/

int main()
{
    Read();
    Directions();
    //Lee1();
    Lee2();
    //Check();
    g << Map2[y1][y2];
    f.close();
    g.close();
    return 0;
}