Cod sursa(job #1631660)

Utilizator MailatMailat Radu Mailat Data 5 martie 2016 17:50:11
Problema Kdrum Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <queue>
#define MAX 51
using namespace std;

int N, M, K;
int startx, starty, stopx, stopy;
int Map[MAX][MAX];
int Aux[MAX][MAX];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
queue < pair <int, int> > coada;


void Citire()
{
    ifstream fin("kdrum.in");
    fin >> N >> M >> K;
    fin >> startx >> starty >> stopx >> stopy;
    for(int i = 1; i <= N; i++)
    {
        for(int j=1; j<=M; j++)
        {
            fin >> Map[i][j];
            if(Map[i][j] == 0) Map[i][j] = -1;
        }
    }

}

bool OK(int i, int j)
{
    if(i < 1 || i > N || j < 1 || j > M) return false;
    else if(Map[i][j] == -1) return false;
    return true;
}

void Lee()
{
    int i, j, i_urmator, j_urmator;

    coada.push(make_pair(startx, starty));
    Aux[startx][starty] = 1;
    while(!coada.empty())
    {
        i = coada.front().first;
        j = coada.front().second;
        coada.pop();
        for(int dir=0; dir<4; dir++)
        {
            i_urmator = i + dx[dir];
            j_urmator = j + dy[dir];
            if(OK(i_urmator, j_urmator) && Aux[i_urmator][j_urmator] < 1)
            {
                Aux[i_urmator][j_urmator] = Aux[i][j] + 1;
                coada.push(make_pair(i_urmator, j_urmator));
            }
        }
    }

}

int main()
{
    ofstream fout("kdrum.out");
    Citire(); Lee();
    fout << Aux[stopx][stopy];
    return 0;
}