Pagini recente » Cod sursa (job #655187) | Cod sursa (job #156000) | Cod sursa (job #2027388) | Cod sursa (job #2980078) | Cod sursa (job #2600873)
#include<bits/stdc++.h>
#define NMAX 60
#define MMAX 12005
using namespace std;
ifstream f("kdrum.in"); ofstream g("kdrum.out");
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int i,j,n,m,k,P,cm,nr,la,ca,lv,cv,xi,yi,xf,yf;
int a[NMAX][NMAX],divizor[205],poz[MMAX];
short Nr[NMAX][NMAX][205];
struct element
{ int l,c,val; };
queue <element> q;
bool inside(int x, int y)
{ if (x<1 || x>n || y<1 || y>n) return 0;
else return 1;
}
int cmmdc (int a, int b)
{ while (b)
{ int R=a%b;
a=b; b=R;
}
return a;
}
void bfs_lee()
{ Nr[xi][yi][cmmdc(k,a[xi][yi])]=1;
element el;
el.l=xi;
el.c=yi;
el.val=poz[cmmdc(k,a[xi][yi])];
q.push(el);
while (!q.empty())
{ el=q.front();
q.pop();
la=el.l; ca=el.c; P=el.val;
for (int lv,cv,i=0;i<4;++i)
{ lv=la+dx[i];
cv=ca+dy[i];
if (inside(lv,cv) && a[lv][cv])
{ cm=cmmdc(a[lv][cv]*divizor[P],k);
if (! Nr[lv][cv][poz[cm]])
{ Nr[lv][cv][poz[cm]]=Nr[la][ca][P]+1;
el.l=lv; el.c=cv; el.val=poz[cm];
q.push(el);
}
}
}
}
}
int main ()
{ f>>n>>m>>k;
f>>xi>>yi>>xf>>yf;
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)
{ divizor[++nr]=i;
poz[i]=nr;
}
bfs_lee();
g<<Nr[xf][yf][poz[k]];
g.close(); return 0;
}