Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
#include <stdio.h>
typedef struct {
short magassag;
short tavolsag;
} mezo_t;
mezo_t mezo[18961];
int n, mezok, p, q, r, x, y, z, magassag;
int abs(int n)
{
return (n >= 0) ? n : -n;
}
mezo_t *keres(int x, int y, int z)
{
int index, max;
if (x + y + z != 0)
return 0;
if (abs(x) >= n || abs(y) >= n || abs(z) >= n)
return 0;
index = (x + n - 1) * (2 * n - 1);
max = (x < 0) ? x : 0;
index += ((1 - n + max - 1) * (max + n - 1)) / 2;
if (1 < x)
index -= (x * (x - 1)) / 2;
index += n - 1 - z;
if (x > 0)
index -= x;
return &mezo[index];
}
int beolvas(void)
{
int i, magassag;
if (scanf("%d", &n) != 1) {
printf("hibas bemenet\n");
return 0;
}
mezok = (n + 2 * n - 2) * (n - 1) + 2 * n - 1;
for (i = 0; i < mezok; i++) {
if (scanf("%d", &magassag) != 1) {
printf("hibas bemenet\n");
return 0;
}
mezo[i].magassag = magassag;
mezo[i].tavolsag = -1;
}
if (scanf("%d %d %d %d %d %d", &p, &q, &r, &x, &y, &z) != 6) {
printf("hibas bemenet\n");
return 0;
}
return 1;
}
void feltolt(int x, int y, int z, int tavolsag)
{
mezo_t *m;
m = keres(x, y, z);
if (!m)
return;
if (m->magassag != magassag)
return;
if (m->tavolsag >= 0 && tavolsag >= m->tavolsag)
return;
m->tavolsag = tavolsag;
feltolt(x - 1, y, z + 1, tavolsag + 1);
feltolt(x - 1, y + 1, z, tavolsag + 1);
feltolt(x, y - 1, z + 1, tavolsag + 1);
feltolt(x, y + 1, z - 1, tavolsag + 1);
feltolt(x + 1, y - 1, z, tavolsag + 1);
feltolt(x + 1, y, z - 1, tavolsag + 1);
}
int main(void)
{
mezo_t *s, *t;
if (!beolvas())
return 1;
s = keres(p, q, r);
t = keres(x, y, z);
if (!s || !t) {
printf("-1\n");
} else {
magassag = s->magassag;
feltolt(p, q, r, 0);
printf("%d\n", t->tavolsag);
}
return 0;
}