Cod sursa(job #2009816)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 10 august 2017 22:10:05
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 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, r;
};

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;

bool Valid(pozitie poz)
{
    if (poz.l==0 || poz.l==N+1 || poz.c==0 || poz.c==M+1)
      return false;
    return true;
}

void Lee()
{
    poz.l=l1;
    poz.c=c1;
    poz.r=v[l1][c1] % K;
    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];
            poz2.r=(poz.r*v[poz2.l][poz2.c]) % K;
            if (Valid(poz2)==true && 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;
        }
    }
    Lee();
    fout << dp[l2][c2] << '\n';
    fin.close();
    fout.close();
    return 0;
}