main.c
#include <stdio.h>
#include <stdlib.h>
int sachovnice[101* 101];
int fronta[101*101];
int fronta_f, fronta_c;
int startx, starty;
int cilx, cily;
int w, h;
int push(int p)
{
fronta[fronta_f + fronta_c] = p;
fronta_c++;
return 0;
}
int pop()
{
int rtn;
if (fronta_c == 0)
return -1;
rtn = fronta[fronta_f];
fronta_f++;
fronta_c--;
return rtn;
}
int expand(int x, int y, int t)
{
if (x <= 0 || y <= 0 || x > w || y > h)
return 0;
if (sachovnice[x + y * 101] != -1)
return 0;
push(x + y * 101);
sachovnice[x + y * 101] = t;
return 1;
}
int init()
{
memset(sachovnice
, 255, 101 * 101 * sizeof(int)); fronta_f = 0;
fronta_c = 0;
expand(startx, starty, 0);
return 0;
}
int main(int argc, char *argv[])
{
int ex, ey;
int v;
int done;
while (scanf("%d %d %d %d %d %d", &w
, &h
, &startx
, &starty
, &cilx
, &cily
) == 6) {
init();
done = 0;
do
{
v = pop();
if (v == -1)
{
done = 1;
}
else
{
if (v == cily * 101 + cilx)
{
printf("%d\n", sachovnice
[v
]); done = 1;
}
else
{
ex = v % 101;
ey = v / 101;
expand(ex + 1, ey + 2, sachovnice[v] + 1);
expand(ex - 1, ey + 2, sachovnice[v] + 1);
expand(ex + 1, ey - 2, sachovnice[v] + 1);
expand(ex - 1, ey - 2, sachovnice[v] + 1);
expand(ex + 2, ey + 1, sachovnice[v] + 1);
expand(ex - 2, ey + 1, sachovnice[v] + 1);
expand(ex + 2, ey - 1, sachovnice[v] + 1);
expand(ex - 2, ey - 1, sachovnice[v] + 1);
}
}
}while(!done);
}
return 0;
}