fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define SIZE 9
  6. int board[SIZE][SIZE];
  7. int INF = 0x7FFFFFFF;
  8.  
  9. int w[8][2] = {
  10. {1,2},{1,-2},{-1,2},{-1,-2},
  11. {2,1},{2,-1},{-2,1},{-2,-1}
  12. };
  13.  
  14.  
  15. int isInRange(int x, int y){
  16. if((0 <= x && x < SIZE)&&(0 <= y && y < SIZE)){
  17. return 1;
  18. }else{
  19. return 0;
  20. }
  21. }
  22.  
  23. void update(int cx, int cy, int tx, int ty){
  24. if(board[tx][ty] != INF && board[cx][cy] > board[tx][ty] + 1){
  25. board[cx][cy] = board[tx][ty] + 1;
  26. }
  27. }
  28.  
  29. void print_board(){
  30. int i,j;
  31. printf("------- print board -------\n");
  32. for(i=0; i < SIZE; i++){
  33. for(j=0; j < SIZE; j++){
  34. if(board[i][j] == INF){
  35. printf("INF, ");
  36. }else{
  37. printf ("%3d, ", board[i][j]);
  38. }
  39. }
  40. printf("\n");
  41. }
  42. printf("------- ----- ----- -------\n");
  43. }
  44.  
  45. void print_route(int X, int Y){
  46.  
  47. printf(" ---- route -----\n");
  48.  
  49. int i,j;
  50. int len = 1;
  51. int route[SIZE][SIZE];
  52.  
  53. for(i=0; i < SIZE; i++){
  54. for(j=0; j <SIZE; j++){
  55. route[i][j] = 0;
  56. }
  57. }
  58.  
  59. route[X][Y] = len;
  60.  
  61. while(1){
  62. int minX, minY;
  63. int min = INF;
  64. for(i=0; i < 8; i++){
  65. if(isInRange(X+w[i][0], Y+w[i][1])){
  66. if(min > board[X+w[i][0]][Y+w[i][1]]){
  67. minX = X + w[i][0];
  68. minY = Y + w[i][1];
  69. min = board[X+w[i][0]][Y+w[i][1]];
  70. }
  71. }
  72. }
  73. // increse path walk length
  74. len++;
  75. X = minX;
  76. Y = minY;
  77. route[X][Y] = len;
  78.  
  79. if(min == 0){
  80. break;
  81. }
  82. }/*while*/
  83.  
  84.  
  85. for(i=0; i < SIZE; i++){
  86. for(j=0; j <SIZE; j++){
  87.  
  88. if(route[i][j] == 0){
  89. printf(" , ");
  90. }else{
  91. printf("%3d, ", route[i][j]);
  92. }
  93. }
  94. printf("\n");
  95. }
  96.  
  97.  
  98. }
  99.  
  100.  
  101.  
  102. int getScore(int startX, int startY, int endX, int endY){
  103. int i,j,k;
  104.  
  105.  
  106. if(!isInRange(startX, startY)){
  107. printf("out of range!\n");
  108. exit(1);
  109. }
  110. if(!isInRange(endX, endY)){
  111. printf("out of range!\n");
  112. exit(1);
  113. }
  114.  
  115. // initialize board
  116. for(i=0; i < SIZE; i++){
  117. for(j=0; j < SIZE; j++){
  118. board[i][j] = INF;
  119. }
  120. }
  121. // record minimum cost
  122. board[endX][endY] = 0;
  123.  
  124. print_board();
  125.  
  126. while(1){
  127.  
  128. int i,j;
  129. for(i=0; i < SIZE; i++){
  130. for(j=0; j < SIZE; j++){
  131. for(k=0; k < 8; k++){
  132. if(isInRange(i+w[k][0], j+w[k][1])){
  133. update(i,j,i+w[k][0], j+w[k][1]);
  134. }
  135. }
  136. }
  137. }
  138.  
  139. print_board();
  140.  
  141. if(board[startX][startY] != INF){
  142. printf("----- find !! -----\n");
  143. print_route(startX, startY);
  144. break;
  145. }
  146.  
  147. }/*while*/
  148.  
  149. return board[startX][startY];
  150. }
  151.  
  152.  
  153.  
  154. int main(int argc, const char *argv[])
  155. {
  156.  
  157. int startX=1, startY=1;
  158. int endX=7, endY=5;
  159.  
  160.  
  161. getScore(
  162. startY,startX,
  163. endY,endX
  164. );
  165.  
  166. return 0;
  167. }
Success #stdin #stdout 0.02s 1720KB
stdin
Standard input is empty
stdout
------- print board -------
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF,   0, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
------- ----- ----- -------
------- print board -------
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF, INF,   1, INF,   1, 
INF, INF, INF, INF,   2,   1,   2, INF,   2, 
INF, INF,   3,   2,   3,   2,   3,   0,   3, 
  4,   3,   4,   3,   2,   1,   2,   3,   4, 
  5,   4,   3,   2,   3,   4,   1,   2,   1, 
  4,   3,   4,   3,   2,   3,   2,   3,   2, 
------- ----- ----- -------
------- print board -------
INF, INF, INF, INF, INF, INF, INF, INF, INF, 
INF, INF, INF, INF, INF,   2, INF,   2, INF, 
INF, INF, INF,   3,   2,   3,   2,   3,   2, 
INF,   4,   3,   2,   3,   4,   1,   2,   1, 
  4,   3,   4,   3,   2,   1,   2,   3,   2, 
  5,   4,   3,   2,   3,   2,   3,   0,   3, 
  4,   3,   4,   3,   2,   1,   2,   3,   2, 
  5,   4,   3,   2,   3,   4,   1,   2,   1, 
  4,   3,   4,   3,   2,   3,   2,   3,   2, 
------- ----- ----- -------
------- print board -------
INF, INF,   4,   3,   4,   3,   4,   3,   4, 
  5,   4,   3,   4,   3,   2,   3,   2,   3, 
  4,   3,   4,   3,   2,   3,   2,   3,   2, 
  5,   4,   3,   2,   3,   4,   1,   2,   1, 
  4,   3,   4,   3,   2,   1,   2,   3,   2, 
  5,   4,   3,   2,   3,   2,   3,   0,   3, 
  4,   3,   4,   3,   2,   1,   2,   3,   2, 
  5,   4,   3,   2,   3,   4,   1,   2,   1, 
  4,   3,   4,   3,   2,   3,   2,   3,   2, 
------- ----- ----- -------
----- find !! -----
 ---- route -----
   ,    ,    ,    ,    ,    ,    ,    ,    , 
   ,   1,    ,    ,    ,   3,    ,    ,    , 
   ,    ,    ,   2,    ,    ,    ,    ,    , 
   ,    ,    ,    ,    ,    ,   4,    ,    , 
   ,    ,    ,    ,    ,    ,    ,    ,    , 
   ,    ,    ,    ,    ,    ,    ,   5,    , 
   ,    ,    ,    ,    ,    ,    ,    ,    , 
   ,    ,    ,    ,    ,    ,    ,    ,    , 
   ,    ,    ,    ,    ,    ,    ,    ,    ,