grasshop.cpp
#include <cstdio>
int pole[102][102];
int velX,velY,startX,startY,cilX,cilY;
void rekurze(int X,int Y,int N)
{
//~ printf ("---- %d %d\n",X,Y);
if (X<1||Y<1||X>velX||Y>velX) return;
if (pole[X][Y]==-1 || pole[X][Y]>N) pole[X][Y]=N;
else return;
if (cilX>X)
{
rekurze(X+2,Y-1,N+1);
rekurze(X+2,Y+1,N+1);
}
else
{
rekurze(X-2,Y-1,N+1);
rekurze(X-2,Y+1,N+1);
}
if (cilY>Y)
{
rekurze(X-1,Y+2,N+1);
rekurze(X+1,Y+2,N+1);
}
else
{
rekurze(X-1,Y-2,N+1);
rekurze(X+1,Y-2,N+1);
}
}
int main()
{
//~ int velX,velY,startX,startY,cilX,cilY;
while (scanf("%d%d%d%d%d%d",&velX,&velY,&startX,&startY,&cilX,&cilY)==6)
{
for (int i=1;i<=velX;i++)
for (int j=1;j<=velY;j++)
pole[i][j]=-1;
rekurze(startX,startY,0);
if (pole[cilX][cilY]==-1) printf("impossible\n");
else printf("%d\n",pole[cilX][cilY]);
}
}