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 = -1; int pocet = 1; int max = 0; pole[(prosle.back()).x][(prosle.back()).y] = pocet; bool nenalezeno = true; if (gr==lr && gc==lc) { nenalezeno = false; vysledek = 1; } while(nenalezeno && max < 100000) { 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(); } } if (vysledek == -1) printf("impossible"); else printf("%d",vysledek-1); printf("\n"); } return 0; }
--- c4.s1094.cteam106.grasshop.cpp.0.grasshop.cpp +++ c4.s1117.cteam106.grasshop.cpp.0.grasshop.cpp @@ -14,5 +14,5 @@ bool jevectverci(int x, int y, int r, int c) { - return ((x >= 0 && x < r) && (y >= 0 && y< c))?true:false; + return ((x >= 0 && x < r) && (y >= 0 && y < c))?true:false; } @@ -37,9 +37,14 @@ deque<bod> nove; - int vysledek = 0; + int vysledek = -1; int pocet = 1; int max = 0; pole[(prosle.back()).x][(prosle.back()).y] = pocet; bool nenalezeno = true; + if (gr==lr && gc==lc) + { + nenalezeno = false; + vysledek = 1; + } while(nenalezeno && max < 100000) { @@ -183,21 +188,5 @@ } } - /* - 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) + if (vysledek == -1) printf("impossible"); else