grasshop.c
#include <stdio.h>
#include <stdlib.h>
#define MAX 101*101
int pole[MAX]; //ulozenie v jednom poli
int p1[8]={1,2,2,1,-1,-2,-2,-1};
int p2[8]={2,1,-1,-2,-2,-1,1,2};
int zac1, zac2;
int kon1, kon2;
int i,j,k,velkost, s1,s2, r1, r2, zmenilo_sa; //d-velkost
int m, n; //rozmery
int main(){
while(scanf("%d %d %d %d %d %d", &m
, &n
, &zac1
, &zac2
, &kon1
, &kon2
)==6){ //vynulujeme pole
zac1--;
zac2--;
kon1--;
kon2--;
velkost = m*n - 1;
for(i=0; i<velkost+2; i++) {pole[i]=0;}
pole[zac1*m+zac2]=1; //zaciatok
/*
for(i=0; i<m; i++){
for(j=0; j<n; j++){
printf("%d ", pole[i*m +j]);
}
printf("\n");
}
*/
//vlna
j=1; s1 = zac1; s2=zac2; zmenilo_sa = 1;
while((pole[kon1*m+kon2]==0)&&(zmenilo_sa == 1)){
zmenilo_sa = 0;
for(s1 = 0; s1<m; s1++){
for(s2 = 0; s2 < n; s2++){
if(pole[s1*m+s2]==j){
//okolie zvysime o 1
for(i=0; i<8; i++){
r1 = s1+p1[i];
r2 = s2+p2[i];
if(r1 >=0 && r1 < m && r2 >= 0 && r2 < n){
//sme na sachovnici
if(pole[r1*m+r2]==0){
pole[r1*m+r2] = j+1;
zmenilo_sa=1; //pojde to dalej
}
}
}
}
}
}
j++;
//nasleduje dalsia vlna
}
if(pole[kon1*m+kon2]==0){
}
else{
printf("%d\n", pole
[kon1
*m
+kon2
]-1); }
/*
for(i=0; i<m; i++){
for(j=0; j<n; j++){
printf("%d ", pole[i*m +j]);
}
printf("\n");
}
*/
}
return 0;
}