#include #include int W = 0; int H = 0; int *M = 0; int Target = -1; char *Move = 0; int *Path = 0; int Shift = 8; int move(int i, int j, int move_no) { int rc = 0; if ((0<=i) && (i= 2) { if (Path[move_no-2] == ((i << Shift) | j)) { rc = 0; goto END; } else { Path[move_no] = (i << Shift) | j; } } else { Path[move_no] = (i << Shift) | j; } } else { rc = 0; goto END; } } else { rc = 0; goto END; } if (Move[i+W*j] == 1) { rc = 1; } else { Move[i+W*j] = 1; if (1 == move(i+1, j, move_no+1)) { rc = 1; } else if (1 == move(i, j+1, move_no+1)) { rc = 1; } else if (1 == move(i-1, j, move_no+1)) { rc = 1; } else if (1 == move(i, j-1, move_no+1)) { rc = 1; } else { rc = 0; } } END: ; return rc; } int main() { int i, j; scanf("%d", &W); scanf("%d", &H); M = (int*)malloc(sizeof(int)*W*H); for (j=0; j