Go to diff to previous submission
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <cstring> #include <sstream> #include <stdio.h> #include <ctype.h> #include <math.h> #include <string.h> #include <stdlib.h> using namespace std; #define X first #define Y second #define MP make_pair #define PB push_back #define SZ size int main(void) { int a, b, c, d, e, f, g, aa, i, ii, akt, akt2, j, k; int vrcholy[110][110]; int uz[110][110]; while (scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f) > 0) { for (i = 1; i <= a; i++) { for (ii = 1; ii <= b; ii++) { vrcholy[i][ii] = 9999999; uz[i][ii] = -1; } } vrcholy[c][d] = 0; uz[c][d] = 1; akt = c; akt2 = d; if (akt - 1 > 0 && akt2 - 2 > 0) if (vrcholy[akt - 1][akt2 - 2] > vrcholy[akt][akt2]) vrcholy[akt-1][akt2 - 2] = vrcholy[akt][akt2] + 1; if (akt - 2 > 0 && akt2 - 1 > 0) if (vrcholy[akt - 2][akt2 - 1] > vrcholy[akt][akt2]) vrcholy[akt-2][akt2 - 1] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 - 2 > 0) if (vrcholy[akt + 1][akt2 - 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 - 2] = vrcholy[akt][akt2] + 1; if (akt + 2 <= a && akt2 - 1 > 0) if (vrcholy[akt + 2][akt2 - 1] > vrcholy[akt][akt2]) vrcholy[akt+2][akt2 - 1] = vrcholy[akt][akt2] + 1; if (akt - 1 > 0 && akt2 +2 <= b) if (vrcholy[akt - 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt-1][akt2 + 2] = vrcholy[akt][akt2] + 1; if (akt - 2 > 0 && akt2 +1 <= b) if (vrcholy[akt - 2][akt2 +1] > vrcholy[akt][akt2]) vrcholy[akt-2][akt2 +1] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 + 2 <= b) if (vrcholy[akt + 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 + 2] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 + 2 <= b) if (vrcholy[akt + 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 + 2] = vrcholy[akt][akt2] + 1; for (i = 1; i <= a; i++) { for (ii = 1; ii <= b; ii++) { akt = -1; akt2 = -1; for (j = 1; j <= a; j++) { for (k = 1; k <= b; k++) { if (uz[j][k] == -1 && (akt == -1 || vrcholy[j][k] < vrcholy[akt][akt2]) && vrcholy[j][k] != 9999999) { akt = j; akt2 = k; } } } if (akt != -1) { uz[akt][akt2] = 1; if (akt - 1 > 0 && akt2 - 2 > 0) if (vrcholy[akt - 1][akt2 - 2] > vrcholy[akt][akt2]) vrcholy[akt-1][akt2 - 2] = vrcholy[akt][akt2] + 1; if (akt - 2 > 0 && akt2 - 1 > 0) if (vrcholy[akt - 2][akt2 - 1] > vrcholy[akt][akt2]) vrcholy[akt-2][akt2 - 1] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 - 2 > 0) if (vrcholy[akt + 1][akt2 - 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 - 2] = vrcholy[akt][akt2] + 1; if (akt + 2 <= a && akt2 - 1 > 0) if (vrcholy[akt + 2][akt2 - 1] > vrcholy[akt][akt2]) vrcholy[akt+2][akt2 - 1] = vrcholy[akt][akt2] + 1; if (akt - 1 > 0 && akt2 +2 <= b) if (vrcholy[akt - 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt-1][akt2 + 2] = vrcholy[akt][akt2] + 1; if (akt - 2 > 0 && akt2 +1 <= b) if (vrcholy[akt - 2][akt2 +1] > vrcholy[akt][akt2]) vrcholy[akt-2][akt2 +1] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 + 2 <= b) if (vrcholy[akt + 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 + 2] = vrcholy[akt][akt2] + 1; if (akt + 1 <= a && akt2 + 2 <= b) if (vrcholy[akt + 1][akt2 + 2] > vrcholy[akt][akt2]) vrcholy[akt+1][akt2 + 2] = vrcholy[akt][akt2] + 1; } else { break; } } } if (vrcholy[e][f] != 9999999) printf("%d\n", vrcholy[e][f]); else printf("impossible\n"); } return 0; }