Pagini recente » Cod sursa (job #1607184) | Cod sursa (job #3234071) | Cod sursa (job #1268233) | Cod sursa (job #2034041) | Cod sursa (job #254733)
Cod sursa(job #254733)
#include<stdio.h>
int N,M,K,T,F,X1,X2,Y1,Y2,S2[51][51],S[51][51],B[51][51],L[20000][2];
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d",&N,&M,&K);
scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2);
L[1][1]=X1;L[1][2]=Y1;
for (int i=1;i<=N;++i)
for (int j=1;j<=M;++j)
scanf("%d",&B[i][j]);
T=1;F=1;
S2[X1][Y1]=B[X1][Y1];S[X1][Y1]=0;
for (T;T<=F;++T)
{
int li=L[T][1],co=L[T][2];
if ((li>1)&&(B[li-1][co]!=0)&&((S[li][co]<=S[li-1][co]) || (S2[li-1][co]==0)) )
if (((li-1!=X2)||(co!=Y2))||((S2[li][co]*B[li-1][co])%K==0))
{++F;L[F][1]=li-1;L[F][2]=co;
S2[li-1][co]=B[li-1][co]*S2[li][co];
S[li-1][co]=S[li][co]+1;
}
if ((li<N)&&(B[li+1][co]!=0)&&((S[li][co]<=S[li+1][co]) || (S2[li+1][co]==0) ) )
if (((li+1!=X2)||(co!=Y2))||((S2[li][co]*B[li+1][co])%K==0))
{++F;L[F][1]=li+1;L[F][2]=co;
S2[li+1][co]=B[li+1][co]*S2[li][co];
S[li+1][co]=S[li][co]+1;
}
if ((co>1)&&(B[li][co-1]!=0)&&((S[li][co]<=S[li][co-1]) || (S2[li][co-1]==0) ) )
if (((li!=X2)||(co-1!=Y2))||((B[li][co-1]*S2[li][co])%K==0))
{++F;L[F][1]=li;L[F][2]=co-1;
S2[li][co-1]=B[li][co-1]*S2[li][co];
S[li][co-1]=S[li][co]+1;
}
if ( (co<N)&&(B[li][co+1]!=0)&& ( (S[li][co]<=S[li][co+1]) || (S2[li][co+1]==0) ) )
if( ((li!=X2)||(co+1!=Y2)) || ((B[li][co+1]*S2[li][co])%K==0))
{++F;L[F][1]=li;L[F][2]=co+1;
S2[li][co+1]=B[li][co+1]*S2[li][co];
S[li][co+1]=S[li][co]+1;
}
}
printf("%d",S[X2][Y2]+1);
return 0;
}