Cod sursa(job #2107370)

Utilizator KOzarmOvidiu Badea KOzarm Data 17 ianuarie 2018 08:50:59
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <deque>
using namespace std;


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


struct elem
{
    int i,j,val,stp;
}el,el1,in,fi;

int a[51][51],n,m,k;
const int di[]={-1,0,0,1},dj[]={0,-1,1,0};

deque <elem> d;

int cmmdc(int a,int b)
{
    while(b!=0)
    {
        int c=a%b;
        a=b;
        b=c;
    }
    return a;
}



int cauta()
{
    while(!d.empty())
    {
        el=d.front();
        d.pop_front();
        for(int i=0;i<4;i++)
        if(a[el.i+di[i]][el.j+dj[i]]!=0)
        {
            el1.i=el.i+di[i];
            el1.j=el.j+dj[i];
            el1.val=el.val/cmmdc(el1.val,a[el.i+di[i]][el.j+dj[i]]);
            el1.stp=el.stp+1;
            if(el1.i==fi.i&&el1.j==fi.j&&el1.val==1)
                return el1.stp;
            d.push_back(el1);
        }
    }
}


int main()
{
    fin>>n>>m>>k;
    fin>>in.i>>in.j>>fi.i>>fi.j;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        fin>>a[i][j];
    k=k/cmmdc(k,a[in.i][in.j]);
    el.i=in.i;
    el.j=in.j;
    el.val=k;
    el.stp=1;
    d.push_back(el);
    fout<<cauta();
    return 0;
}