Cod sursa(job #2009821)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 10 august 2017 22:15:00
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <queue>
#define VAL 55
#define MOD 12005

using namespace std;

ifstream fin("kdrum.in");
ofstream fout("kdrum.out");

const int dl[4]={-1, 0, 1, 0};
const int dc[4]={0, -1, 0, 1};

struct pozitie
{
    int l, c;
};

pozitie poz, poz2;

int N, M, K, i, j, k;
int l1, l2, c1, c2;
int v[VAL][VAL], d;
int dp[VAL][VAL];
queue <pozitie> Q;

void Lee()
{
    poz.l=l1;
    poz.c=c1;
    dp[poz.l][poz.c]=1;
    Q.push(poz);
    while (Q.empty()==false)
    {
        poz=Q.front();
        Q.pop();
        for (d=0; d<4; d++)
        {
            poz2.l=poz.l+dl[d];
            poz2.c=poz.c+dc[d];
            if (dp[poz2.l][poz2.c]>dp[poz.l][poz.c]+1)
            {
                dp[poz2.l][poz2.c]=dp[poz.l][poz.c]+1;
                Q.push(poz2);
            }
        }
    }
}

int main()
{
    fin >> N >> M >> K;
    fin >> l1 >> c1 >> l2 >> c2;
    for (i=1; i<=N; i++)
    {
        for (j=1; j<=M; j++)
        {
            fin >> v[i][j];
            dp[i][j]=MOD;
        }
    }
    for (i=0; i<=N+1; i++)
      dp[i][0]=dp[i][M+1]=-1;
    for (j=0; j<=M+1; j++)
      dp[0][j]=dp[N+1][j]=-1;
    Lee();
    fout << dp[l2][c2] << '\n';
    fin.close();
    fout.close();
    return 0;
}