Pagini recente » Cod sursa (job #36151) | Cod sursa (job #221733) | Cod sursa (job #9841) | Cod sursa (job #2237550)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50
#define DIR 4
typedef struct {
int x, y, val, d;
} coord;
coord q[1 + NMAX * NMAX * NMAX];
int n, m, k, x1, y1, x2, y2;
int parc[1 + NMAX + 1][1 + NMAX + 1];
int ldir[] = { -1, 0, 1, 0};
int cdir[] = {0, 1, 0, -1};
int main() {
FILE *fin = fopen ( "kdrum.in", "r" );
fscanf ( fin, "%d%d%d", &n, &m, &k );
fscanf ( fin, "%d%d%d%d", &x1, &y1, &x2, &y2 );
int l, c;
for ( l = 1; l <= n; ++l ) {
for ( c = 1; c <= m; ++c ) {
fscanf ( fin, "%d", &parc[l][c] );
parc[l][c] %= k;
}
}
fclose ( fin );
int vf = 0;
int last = 0;
q[0] = ( coord ) {x1, y1, parc[x1][y1], 1};
int sol = 0;
while ( sol == 0 ) {
int x = q[vf].x;
int y = q[vf].y;
int val = q[vf].val;
int d = q[vf].d;
++vf;
if ( x == x2 && y == y2 && val == 0 )
sol = d;
else {
int i;
for ( i = 0; i < DIR; ++i ) {
l = x + ldir[i];
c = y + cdir[i];
if ( parc[l][c] > 0 )
q[++last] = ( coord ) {l, c, ( val * parc[l][c] ) % k, d + 1};
}
}
}
FILE *fout = fopen ( "kdrum.out", "w" );
fprintf ( fout, "%d", sol );
fclose ( fout );
return 0;
}