fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define SIZE 64
  5.  
  6. int imove[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
  7. int jmove[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
  8.  
  9. int check_go(int p, int q, int board[][8])
  10. {
  11. if (p < 0 || q < 0 || p > 7 || q > 7 || board[p][q] != -1)
  12. {
  13. return 0;
  14. }
  15. else
  16. return 1;
  17. }
  18.  
  19. int knight_tour(int p, int q, int board[][8], int num)
  20. {
  21. int i, j;
  22. int x, y;
  23. int res = 0;
  24.  
  25. board[p][q] = num;
  26.  
  27. if (num == 63)
  28. {
  29. for (i = 0; i < 8; i++)
  30. {
  31. for (j = 0; j < 8; j++)
  32. printf("%3d ", board[i][j]);
  33. printf("\n");
  34. }
  35. return 1;
  36. }
  37.  
  38. for (i = 0; i < 8; i++)
  39. {
  40. x = p + imove[i];
  41. y = q + jmove[i];
  42.  
  43. if (check_go(x, y, board))
  44. res = knight_tour(x, y, board, num + 1);
  45. if (res == 1)
  46. return 1;
  47. }
  48.  
  49. board[p][q] = -1;
  50. return 0;
  51. }
  52.  
  53.  
  54. int main(int argc, char* argv[])
  55. {
  56. int board[8][8];
  57. int i, j;
  58. int p, q;
  59. int result;
  60.  
  61. /* Reset board */
  62. memset(board, -1, sizeof(int) * 64);
  63.  
  64. p = 1;
  65. q = 4;
  66.  
  67. if (p < 0 || q < 0 || p > 7 || q > 7)
  68. {
  69. printf("Error: 0 =< p =< 7 && 0 =< q =< 7\n");
  70. return -1;
  71. }
  72.  
  73. result = knight_tour(p, q, board, 0);
  74.  
  75. if (result)
  76. {
  77. for (i = 0; i < 8; i++)
  78. {
  79. for (j = 0; j < 8; j++)
  80. printf("%3d ", board[i][j]);
  81. printf("\n");
  82. }
  83. }
  84. else
  85. {
  86. printf("No answer\n");
  87. }
  88.  
  89. }
Time limit exceeded #stdin #stdout 5s 4480KB
stdin
Standard input is empty
stdout
Standard output is empty