Pagini recente » Cod sursa (job #2143373) | Cod sursa (job #248306) | Cod sursa (job #2416747) | Cod sursa (job #612084) | Cod sursa (job #266057)
Cod sursa(job #266057)
#include <stdio.h>
#define DIM 65
#define KMAX 12005
#define DIV 155
struct coada {int x,y,d;} c[DIM*DIM*DIV];
int dx[4]={1,0,-1, 0};
int dy[4]={0,1, 0,-1};
int sol[DIM][DIM][DIV],a[DIM][DIM],d[DIV],uz[KMAX];
int n,m,k,x1,y1,x2,y2,nrt;
void read ()
{
int i,j;
scanf ("%d%d%d%d%d%d%d",&n,&m,&k,&x1,&y1,&x2,&y2);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
scanf ("%d",&a[i][j]);
for (i=1; i<=k; ++i)
if (k%i==0)
{
d[++nrt]=i;
uz[i]=nrt;
}
}
int euclid (int a,int b)
{
int r;
do
{
r=a%b;
a=b;
b=r;
}
while (r);
return a;
}
void solve ()
{
coada t;
int in=1,sf=1,q,h;
q=euclid (k,a[x1][y1]);
c[in].x=x1;
c[in].y=y1;
c[in].d=uz[k/q];
sol[x1][y1][uz[k/q]]=1;
while (in<=sf)
{
t=c[in++];
for (q=0; q<4; ++q)
if (a[t.x+dx[q]][t.y+dy[q]])
{
h=d[t.d]/euclid (d[t.d],a[t.x+dx[q]][t.y+dy[q]]);
if (sol[t.x+dx[q]][t.y+dy[q]][uz[h]]>sol[t.x][t.y][t.d]+1 || !sol[t.x+dx[q]][t.y+dy[q]][uz[h]])
{
sol[t.x+dx[q]][t.y+dy[q]][uz[h]]=sol[t.x][t.y][t.d]+1;
c[++sf].x=t.x+dx[q];
c[sf].y=t.y+dy[q];
c[sf].d=uz[h];
}
}
}
printf ("%d",sol[x2][y2][uz[1]]);
}
int main ()
{
freopen ("kdrum.in","r",stdin);
freopen ("kdrum.out","w",stdout);
read ();
solve ();
return 0;
}