#include <stdio.h>
#include <string.h>
#define SIZE 64
int imove[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int jmove[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
int check_go(int p, int q, int board[][8])
{
if (p < 0 || q < 0 || p > 7 || q > 7 || board[p][q] != -1)
{
return 0;
}
else
return 1;
}
int knight_tour(int p, int q, int board[][8], int num)
{
int i, j;
int x, y;
int res = 0;
board[p][q] = num;
if (num == 63)
{
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
}
return 1;
}
for (i = 0; i < 8; i++)
{
x = p + imove[i];
y = q + jmove[i];
if (check_go(x, y, board))
res = knight_tour(x, y, board, num + 1);
if (res == 1)
return 1;
}
board[p][q] = -1;
return 0;
}
int main(int argc, char* argv[])
{
int board[8][8];
int i, j;
int p, q;
int result;
/* Reset board */
memset(board
, -1, sizeof(int) * 64);
p = 1;
q = 4;
if (p < 0 || q < 0 || p > 7 || q > 7)
{
printf("Error: 0 =< p =< 7 && 0 =< q =< 7\n"); return -1;
}
result = knight_tour(p, q, board, 0);
if (result)
{
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
}
}
else
{
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgU0laRSA2NAoKaW50IGltb3ZlWzhdID0geyAyLCAxLCAtMSwgLTIsIC0yLCAtMSwgMSwgMiB9OwppbnQgam1vdmVbOF0gPSB7IDEsIDIsIDIsIDEsIC0xLCAtMiwgLTIsIC0xIH07CgppbnQgY2hlY2tfZ28oaW50IHAsIGludCBxLCBpbnQgYm9hcmRbXVs4XSkKewoJaWYgKHAgPCAwIHx8IHEgPCAwIHx8IHAgPiA3IHx8IHEgPiA3IHx8IGJvYXJkW3BdW3FdICE9IC0xKQoJewoJCXJldHVybiAwOwoJfQoJZWxzZQoJCXJldHVybiAxOwp9CgppbnQga25pZ2h0X3RvdXIoaW50IHAsIGludCBxLCBpbnQgYm9hcmRbXVs4XSwgaW50IG51bSkKewoJaW50IGksIGo7CglpbnQgeCwgeTsKCWludCByZXMgPSAwOwoKCWJvYXJkW3BdW3FdID0gbnVtOwoKCWlmIChudW0gPT0gNjMpCgl7CgkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKCQl7CgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCgkJCQlwcmludGYoIiUzZCAiLCBib2FyZFtpXVtqXSk7CgkJCXByaW50ZigiXG4iKTsKCQl9CgkJcmV0dXJuIDE7Cgl9CgoJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKCXsKCQl4ID0gcCArIGltb3ZlW2ldOwoJCXkgPSBxICsgam1vdmVbaV07CgoJCWlmIChjaGVja19nbyh4LCB5LCBib2FyZCkpCgkJCXJlcyA9IGtuaWdodF90b3VyKHgsIHksIGJvYXJkLCBudW0gKyAxKTsKCQlpZiAocmVzID09IDEpCgkJCXJldHVybiAxOwoJfQoKCWJvYXJkW3BdW3FdID0gLTE7CglyZXR1cm4gMDsKfQoKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKCWludCBib2FyZFs4XVs4XTsKCWludCBpLCBqOwoJaW50IHAsIHE7CglpbnQgcmVzdWx0OwoKCS8qIFJlc2V0IGJvYXJkICovCgltZW1zZXQoYm9hcmQsIC0xLCBzaXplb2YoaW50KSAqIDY0KTsKCglwID0gMTsKCXEgPSA0OwoKCWlmIChwIDwgMCB8fCBxIDwgMCB8fCBwID4gNyB8fCBxID4gNykKCXsKCQlwcmludGYoIkVycm9yOiAwID08IHAgPTwgNyAmJiAwID08IHEgPTwgN1xuIik7CgkJcmV0dXJuIC0xOwoJfQoKCXJlc3VsdCA9IGtuaWdodF90b3VyKHAsIHEsIGJvYXJkLCAwKTsKCglpZiAocmVzdWx0KQoJewoJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCgkJewoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQoJCQkJcHJpbnRmKCIlM2QgIiwgYm9hcmRbaV1bal0pOwoJCQlwcmludGYoIlxuIik7CgkJfQoJfQoJZWxzZQoJewoJCXByaW50ZigiTm8gYW5zd2VyXG4iKTsKCX0KCn0=