Pagini recente » Cod sursa (job #728842) | Cod sursa (job #117819) | Cod sursa (job #2917262) | Cod sursa (job #1037007) | Cod sursa (job #465433)
Cod sursa(job #465433)
# include <fstream.h>
int Ma[55][55][150],l,c,p,u,i,j,d,k,D[150],ap[12001],dx[4]={1, 0, -1, 0},N,M,K,x1,y1,x2,dy[4]={0, 1, 0, -1},y2,x,a[55][55];
struct elem{int x,y,d;} C[55*55*150],X;
int cmmdc(int a, int b)
{int r;
do
{r=a%b;
a=b;b=r;}
while(r!=0);
return a;}
int main()
{ifstream q("kdrum.in");
ofstream w("kdrum.out");
q>>N>>M>>K>>x1>>y1>>x2>>y2;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
q>>a[i][j];
for(d=1,k=0;d<=K;d++)
{if(K%d==0)
{D[++k]=d;
ap[d]=k;}}
p=u=1;
C[p].x=x1;
C[p].y=y1;
d=cmmdc(a[x1][y1],K);
C[p].d=ap[K/d];
Ma[x1][y1][ap[K/d]]=1;
while(p<=u)
{X=C[p];
for(i=0;i<4;i++)
{l=X.x+dx[i];
c=X.y+dy[i];
if(l>=1&&l<=N&&c>=1&&c<=M&&a[l][c])
{d=D[X.d]/cmmdc(a[l][c],D[X.d]);
if(Ma[l][c][ap[d]]>Ma[X.x][X.y][X.d]+1||Ma[l][c][ap[d]]==0)
{Ma[l][c][ap[d]]=Ma[X.x][X.y][X.d]+1;
u++;
C[u].x=l;
C[u].y=c;
C[u].d=ap[d];}}}
p++;}
w<<Ma[x2][y2][ap[1]];
return 0;}