grassshop.cpp
#include <stdlib.h>
#include <stdio.h>
int pole[100][100];
int posSx, posSy;
int posFx, posFy;
int sizex, sizey;
void check(int x, int y, int jump)
{
if(x > -1 && y > -1 && x < sizex && y < sizey)
{
if(pole[x][y]>jump)
{
pole[x][y] = jump;
check(x+2, y+1,jump+1);
check(x+2, y-1,jump+1);
check(x-2, y+1,jump+1);
check(x-2, y-1,jump+1);
check(x+1, y+2,jump+1);
check(x+1, y-2,jump+1);
check(x-1, y+2,jump+1);
check(x-1, y-2,jump+1);
}
}
}
int main(void)
{
while(scanf("%d %d %d %d %d %d", &sizex, &sizey, &posSx, &posSy, &posFx, &posFy) == 6)
{
for(int i = 0; i<sizex; i++)
for(int j = 0; j<sizey; j++)
pole[i][j] = 1000;
check(posSx-1, posSy-1, 0);
if(pole[posFx-1][posFy-1]==1000)
printf("impossible\n");
else
printf("%d\n", pole[posFx-1][posFy-1]);
}
return 0;
}