Epso

Untitled

Apr 8th, 2012
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define move_types 8
  5. int possible_moves[move_types][2] = {
  6. {-1, -2}, {-2, -1}, {-2, 1}, { 1, -2},
  7. {-1, 2}, { 2, -1}, { 1, 2}, { 2, 1}
  8. };
  9.  
  10. int **desc_state;
  11. int size_x, size_y;
  12. int cur_x, cur_y;
  13.  
  14. int max_moves;
  15. unsigned int back_ret;
  16.  
  17. int position_possible(int x, int y)
  18. {
  19. return x >= 0 && y >= 0 && x < size_x && y < size_y;
  20. }
  21.  
  22. int move_possible(int x, int y)
  23. {
  24. return position_possible(x,y) && desc_state[x][y] == 0;
  25. }
  26.  
  27. int find_path(int cur_x, int cur_y, int move_num)
  28. {
  29. int i = 0;
  30. int next_x = 0, next_y = 0;
  31. desc_state[cur_x][cur_y] = move_num;
  32.  
  33. if(move_num > max_moves)
  34. return 1;
  35.  
  36. for(i = 0; i < move_types; ++i)
  37. {
  38. next_x = cur_x + possible_moves[i][0];
  39. next_y = cur_y + possible_moves[i][1];
  40.  
  41. if(move_possible(next_x, next_y) && find_path(next_x, next_y, move_num + 1))
  42. return 1;
  43. }
  44.  
  45. desc_state[cur_x][cur_y] = 0;
  46. ++back_ret;
  47. --move_num;
  48.  
  49. return 0;
  50. }
  51.  
  52. void init(int **desc, int nrows, int ncols, int start_x, int start_y)
  53. {
  54. int i = 0, j = 0;
  55. desc_state = desc;
  56. size_x = nrows;
  57. size_y = ncols;
  58.  
  59. for(i = 0; i < size_x; ++i) {
  60. for(j = 0; j < size_y; ++j)
  61. desc_state[i][j] = 0;
  62. }
  63.  
  64. back_ret = 0;
  65. max_moves = size_x * size_y - 1;
  66. }
  67.  
  68. void output_path()
  69. {
  70. int i, j;
  71. for(i = 0; i < size_x; ++i) {
  72. for(j = 0; j < size_y; ++j)
  73. printf("%02d ", desc_state[i][j]);
  74.  
  75. printf("\n");
  76. }
  77. }
  78.  
  79. int main()
  80. {
  81. int i = 0;
  82. int nrows = 5;
  83. int ncols = 5;
  84.  
  85. int **desc = NULL;
  86. int sx = 0;
  87. int sy = 0;
  88.  
  89. desc = (int **)malloc(sizeof(int) * nrows);
  90. for(i = 0; i < nrows; ++i)
  91. desc[i] = (int *)malloc(sizeof(int) * ncols);
  92.  
  93. init(desc, nrows, ncols, sx, sy);
  94.  
  95. if(find_path(sx, sy, 1))
  96. output_path();
  97. else
  98. printf("path not found\n");
  99.  
  100. for(i = 0; i < nrows; ++i)
  101. free(desc[i]);
  102. free(desc);
  103.  
  104. system("PAUSE");
  105. return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment