Pagini recente » Cod sursa (job #2026334) | Cod sursa (job #376471) | Cod sursa (job #2820125) | Cod sursa (job #2741885) | Cod sursa (job #2109990)
#include <iostream>
#include<fstream>
#include<queue>
using namespace std;
struct type
{
int l,c,divv;
}el;
queue<type> q;
int d1[]={-1,0,1,0};
int d2[]={0,-1,0,1};
int i,j,mx,d[55][55][75],a[55][55],n,m,k,v[75],ff,l1,c1,l2,c2,li,ci,nr,num,unu,doi,trei,x,ord[12005],nrnod;
int cmmdc()
{
unu=ff*num;
doi=k;
if(unu<doi) swap(unu,doi);
while(doi!=0)
{
trei=unu%doi;
unu=doi;
doi=trei;
}
return unu;
}
int main()
{
ifstream f("kdrum.in");
ofstream g("kdrum.out");
f>>n>>m>>k;
f>>l1>>c1>>l2>>c2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
for(i=1;i<=k;i++)
if(k%i==0)
{
nr++;
ord[i]=nr;
v[nr]=i;
}
for(j=1;j<=nr;j++)
if(a[l1][c1]%v[j]==0)
{
d[l1][c1][j]=1;
el.divv=v[j];el.l=l1;el.c=c1;q.push(el);
}
while(!q.empty()&&d[l2][c2][nr]==0)
{
num=q.front().divv;
li=q.front().l;
ci=q.front().c;
nrnod=ord[num];
q.pop();
for(i=0;i<4;i++)
{
el.l=li+d1[i];
el.c=ci+d2[i];
ff=1;
if(a[el.l][el.c]!=0)
{
ff=a[el.l][el.c];
x=cmmdc();
for(j=1;v[j]<=x&&j<=nr;j++)
{
if((num*ff)%v[j]==0)
{
if(d[el.l][el.c][j]==0)
{
d[el.l][el.c][j]=d[li][ci][nrnod]+1;
el.divv=v[j];
q.push(el);
}
}
}
}
}
}
g<<d[l2][c2][nr];
return 0;
}