Go to diff to previous submission
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <deque> #include <string> using namespace std; typedef struct { int x; int y; } bod; int pole[100][100]; bool jevectverci(int x, int y, int r, int c) { return ((x >= 0 && x < r) && (y >= 0 && y< c))?true:false; } int main() { int r, c, gr, gc, lr, lc; while(scanf("%d %d %d %d %d %d", &r, &c, &gr, &gc, &lr, &lc) == 6) { for(int i=0; i<r; i++) for(int j=0; j<c; j++) { pole[i][j] = 0; } pole[lr-1][lc-1] = -1; deque<bod> prosle; bod b; b.x = gr-1; b.y = gc-1; prosle.push_front(b); deque<bod> nove; int vysledek = 0; int pocet = 1; int max = 0; pole[(prosle.back()).x][(prosle.back()).y] = pocet; bool nenalezeno = true; while(nenalezeno && max < 10000) { max++; if (!nove.empty()) prosle = nove; nove.clear(); pocet++; while(prosle.size() > 0) { if (jevectverci((prosle.back()).x+2,(prosle.back()).y+1,r,c)) { if (pole[(prosle.back()).x+2][(prosle.back()).y+1] == 0) { pole[(prosle.back()).x+2][(prosle.back()).y+1] = pocet; b.x = (prosle.back()).x+2; b.y = (prosle.back()).y+1; nove.push_front(b); } else if (pole[(prosle.back()).x+2][(prosle.back()).y+1] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x+2,(prosle.back()).y-1,r,c)) { if (pole[(prosle.back()).x+2][(prosle.back()).y-1] == 0) { pole[(prosle.back()).x+2][(prosle.back()).y-1] = pocet; b.x = (prosle.back()).x+2; b.y = (prosle.back()).y-1; nove.push_front(b); } else if (pole[(prosle.back()).x+2][(prosle.back()).y-1] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x-2,(prosle.back()).y+1,r,c)) { if (pole[(prosle.back()).x-2][(prosle.back()).y+1] == 0) { pole[(prosle.back()).x-2][(prosle.back()).y+1] = pocet; b.x = (prosle.back()).x-2; b.y = (prosle.back()).y+1; nove.push_front(b); } else if (pole[(prosle.back()).x-2][(prosle.back()).y+1] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x-2,(prosle.back()).y-1,r,c)) { if (pole[(prosle.back()).x-2][(prosle.back()).y-1] == 0) { pole[(prosle.back()).x-2][(prosle.back()).y-1] = pocet; b.x = (prosle.back()).x-2; b.y = (prosle.back()).y-1; nove.push_front(b); } else if (pole[(prosle.back()).x-2][(prosle.back()).y-1] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x+1,(prosle.back()).y+2,r,c)) { if (pole[(prosle.back()).x+1][(prosle.back()).y+2] == 0) { pole[(prosle.back()).x+1][(prosle.back()).y+2] = pocet; b.x = (prosle.back()).x+1; b.y = (prosle.back()).y+2; nove.push_front(b); } else if (pole[(prosle.back()).x+1][(prosle.back()).y+2] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x+1,(prosle.back()).y-2,r,c)) { if (pole[(prosle.back()).x+1][(prosle.back()).y-2] == 0) { pole[(prosle.back()).x+1][(prosle.back()).y-2] = pocet; b.x = (prosle.back()).x+1; b.y = (prosle.back()).y-2; nove.push_front(b); } else if (pole[(prosle.back()).x+1][(prosle.back()).y-2] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x-1,(prosle.back()).y+2,r,c)) { if (pole[(prosle.back()).x-1][(prosle.back()).y+2] == 0) { pole[(prosle.back()).x-1][(prosle.back()).y+2] = pocet; b.x = (prosle.back()).x-1; b.y = (prosle.back()).y+2; nove.push_front(b); } else if (pole[(prosle.back()).x-1][(prosle.back()).y+2] == -1) { vysledek = pocet; nenalezeno = false; break; } } if (jevectverci((prosle.back()).x-1,(prosle.back()).y-2,r,c)) { if (pole[(prosle.back()).x-1][(prosle.back()).y-2] == 0) { pole[(prosle.back()).x-1][(prosle.back()).y-2] = pocet; b.x = (prosle.back()).x-1; b.y = (prosle.back()).y-2; nove.push_front(b); } else if (pole[(prosle.back()).x-1][(prosle.back()).y-2] == -1) { vysledek = pocet; nenalezeno = false; break; } } prosle.pop_back(); } } /* for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { printf("%d ",pole[i][j]); } printf("\n"); } int max = -1; for(int i=0; i<r; i++) for(int j=0; j<c; j++) { if(pole[i][j] > max) max = pole[i][j]; }*/ if (vysledek == 0) printf("impossible\n"); else printf("%d\n",vysledek-1); } return 0; }