Pagini recente » Cod sursa (job #176616) | Cod sursa (job #1889101) | Cod sursa (job #1177961) | Cod sursa (job #1826919) | Cod sursa (job #254497)
Cod sursa(job #254497)
#include<stdio.h>
long n,m,k,x1,x2,y1,y2,i,j,a[60][60],st,dr,x[1000],y[1000],s[1000],p[1000],min,h[60][60];
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&k);
scanf("%ld%ld%ld%ld",&x1,&y1,&x2,&y2);
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
scanf("%ld",&a[i][j]);
st=0;
dr=1;
x[1]=x1;
y[1]=y1;
s[1]=1;
p[1]=1;
min=999999;
h[1][1]=1;
while(++st<=dr)
{
if(h[x[st]+1][y[st]]==0&&a[x[st]+1][y[st]])
{h[x[st]+1][y[st]]=1;
x[++dr]=x[st]+1;
y[dr]=y[st];
s[dr]=s[st]*a[x[dr]][y[dr]];
p[dr]=p[st]+1;
if(x[dr]==x2&&y[dr]==y2&&s[dr]%k==0&&p[dr]<min)
{min=p[dr];break;}}
if(h[x[st]-1][y[st]]==0&&a[x[st]-1][y[st]])
{h[x[st]-1][y[st]]=1;
x[++dr]=x[st]-1;
y[dr]=y[st];
s[dr]=s[st]*a[x[dr]][y[dr]];
p[dr]=p[st]+1;
if(x[dr]==x2&&y[dr]==y2&&s[dr]%k==0&&p[dr]<min)
{min=p[dr];break;}}
if(h[x[st]][y[st]+1]==0&&a[x[st]][y[st]+1])
{h[x[st]][y[st]+1]=1;
x[++dr]=x[st];
y[dr]=y[st]+1;
s[dr]=s[st]*a[x[dr]][y[dr]];
p[dr]=p[st]+1;
if(x[dr]==x2&&y[dr]==y2&&s[dr]%k==0&&p[dr]<min)
{min=p[dr];break;}}
if(h[x[st]][y[st]-1]==0&&a[x[st]][y[st]-1])
{h[x[st]][y[st]-1]=1;
x[++dr]=x[st];
y[dr]=y[st]-1;
s[dr]=s[st]*a[x[dr]][y[dr]];
p[dr]=p[st]+1;
if(x[dr]==x2&&y[dr]==y2&&s[dr]%k==0&&p[dr]<min)
{min=p[dr];break;}}
}
printf("%ld\n",min);
return 0;
}