Go to diff to previous submission
// // File: mosquito.cc // Author: cteam035 // // Created on October 27, 2012, 11:23 AM // #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <iostream> #include <stdio.h> #include <climits> using namespace std; // // // int ** pole; int R, C; int xF, yF; int vysledek2; void vypisPole() { for (int i=0 ; i<R ; i++) { for (int j=0 ; j<C ; j++) { printf("%15d",pole[i][j]); } cout << endl; } } int rekurze(int jump, int X, int Y) { if ( pole[X][Y] < jump) { return pole[X][Y]; } if ( X == xF && Y == yF ) { //finish pole[X][Y] = jump; if ( jump < vysledek2 ) { vysledek2 = jump; } return jump; } pole[X][Y] = jump; int ret = INT_MAX; int tmpRet = INT_MAX; if ( X+2 < C && Y+1 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X+2, Y+1); if (tmpRet < ret) { ret = tmpRet; } } if ( X+1 < C && Y+2 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X+1, Y+2); if (tmpRet < ret) { ret = tmpRet; } } if ( X+2 < C && Y-1 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X+2, Y-1); if (tmpRet < ret) { ret = tmpRet; } } if ( X+1 < C && Y-2 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X+1, Y-2); if (tmpRet < ret) { ret = tmpRet; } } if ( X-2 >= 0 && Y+1 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X-2, Y+1); if (tmpRet < ret) { ret = tmpRet; } } if ( X-1 >= 0 && Y+2 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X-1, Y+2); if (tmpRet < ret) { ret = tmpRet; } } if ( X-1 >= 0 && Y-2 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X-1, Y-2); if (tmpRet < ret) { ret = tmpRet; } } if ( X-2 >= 0 && Y-1 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X-2, Y-1); if (tmpRet < ret) { ret = tmpRet; } } return ret; } int main(int argc, char** argv) { int X1, X2, Y1, Y2; int vysledek; while ( cin >> R >> C >> X1 >> Y1 >> X2 >> Y2 ) { X1 -= 1; X2 -= 1; Y1 -= 1; Y2 -= 1; vysledek2 = INT_MAX; pole = new int* [R]; for( int i=0 ; i<R ; i++) { pole[i] = new int[C]; for (int j=0 ; j<C ; j++) { pole[i][j]=INT_MAX; } } xF = X2; yF = Y2; vysledek = rekurze(0, X1, Y1); if (vysledek == INT_MAX) { cout << "impossible" << endl; } else { cout << vysledek2 << endl; } //vypisPole(); } return (EXIT_SUCCESS); }
--- c4.s1190.cteam035.grasshop.cpp.0.grasshopper.cc +++ c4.s1221.cteam035.grasshop.cpp.0.grasshopper.cc @@ -51,5 +51,5 @@ int tmpRet = INT_MAX; - if ( X+2 < C && Y+1 < R) { + if ( X+2 < C && Y+1 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X+2, Y+1); if (tmpRet < ret) { @@ -57,5 +57,5 @@ } } - if ( X+1 < C && Y+2 < R) { + if ( X+1 < C && Y+2 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X+1, Y+2); if (tmpRet < ret) { @@ -63,5 +63,5 @@ } } - if ( X+2 < C && Y-1 >= 0) { + if ( X+2 < C && Y-1 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X+2, Y-1); if (tmpRet < ret) { @@ -69,5 +69,5 @@ } } - if ( X+1 < C && Y-2 >= 0) { + if ( X+1 < C && Y-2 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X+1, Y-2); if (tmpRet < ret) { @@ -75,5 +75,5 @@ } } - if ( X-2 >= 0 && Y+1 < R) { + if ( X-2 >= 0 && Y+1 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X-2, Y+1); if (tmpRet < ret) { @@ -81,5 +81,5 @@ } } - if ( X-1 >= 0 && Y+2 < R) { + if ( X-1 >= 0 && Y+2 < R && jump < vysledek2) { tmpRet = rekurze(jump+1, X-1, Y+2); if (tmpRet < ret) { @@ -87,5 +87,5 @@ } } - if ( X-1 >= 0 && Y-2 >= 0 ) { + if ( X-1 >= 0 && Y-2 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X-1, Y-2); if (tmpRet < ret) { @@ -93,5 +93,5 @@ } } - if ( X-2 >= 0 && Y-1 >= 0 ) { + if ( X-2 >= 0 && Y-1 >= 0 && jump < vysledek2) { tmpRet = rekurze(jump+1, X-2, Y-1); if (tmpRet < ret) {