Advertisement
Guest User

Untitled

a guest
May 25th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void initBoard(int board[8][8]){
  6. int i;
  7. int j;
  8. int c = 0;
  9. for(i=0;i<8;i++){
  10. for(j=0;j<8;j++){
  11. board[i][j] = c;
  12. c++;
  13. }
  14. }
  15. }
  16.  
  17. void initAdj(int Adj[64][64]){
  18. int i;
  19. int j;
  20. for(i=0;i<64;i++){
  21. for(j=0;j<64;j++){
  22. Adj[i][j] = 0;
  23. }
  24. }
  25. }
  26.  
  27. void availableMove(int x, int y, int board[8][8], int Adj[64][64]){
  28. int i;
  29. int j;
  30.  
  31. for(i=-2;i<=2;i++){
  32. for(j=-2;j<=2;j++){
  33. if(x+i >= 0 && x+i <= 7 && y+j >= 0 && y+j <= 7 && i*j != 0 && (abs(i) == abs(j) + 1 || abs(j) == abs(i) + 1) ){
  34. Adj[board[x][y]][board[x+i][y+j]] = 1;
  35. }
  36. }
  37. }
  38.  
  39. }
  40.  
  41. void calculateAdj(int Adj[64][64], int board[8][8]){
  42. int x,y;
  43. for(x=0;x<8;x++){
  44. for(y=0;y<8;y++){
  45. availableMove(x,y,board,Adj);
  46. }
  47. }
  48.  
  49. }
  50.  
  51. void showBoard(int board[8][8]){
  52. int i;
  53. int j;
  54. printf("[*]Printing board : \n");
  55. for(i=0;i<8;i++){
  56. for(j=0;j<8;j++){
  57. printf("%2d ", board[i][j]);
  58. }
  59. printf("\n");
  60. }
  61. printf("\n\n");
  62. }
  63.  
  64. void showAdj(int Adj[64][64]){
  65. int i;
  66. int j;
  67. printf("[*]Printing Adj Matrix : \n");
  68. for(i=0;i<64;i++){
  69. for(j=0;j<64;j++){
  70. printf("%d ", Adj[i][j]);
  71. }
  72. printf("\n");
  73. }
  74. printf("\n\n");
  75. }
  76.  
  77. void initPoids(int *poids, int depart){
  78. int i;
  79. for(i=0;i<64;i++){
  80. poids[i] = -1;
  81. }
  82. poids[depart] = 0;
  83. }
  84. void initTab(int *p){
  85. int i;
  86. for(i=0;i<64;i++){
  87. p[i] = 0;
  88. }
  89. }
  90.  
  91. int getMin(int *poids, int *parcours){
  92. int i;
  93. int j;
  94. int min = -1;
  95. for(i=0;i<63;i++){
  96. if(poids[i] != -1 && parcours[i] == 0){
  97. if(min == -1 || min > poids[i]){
  98. min = poids[i];
  99. j = i;
  100. }
  101. }
  102. }
  103. return j;
  104.  
  105. }
  106.  
  107. void printTab(int *TAB){
  108. int i;
  109. for(i=0;i<64;i++){
  110. printf("%d:%d ",i,TAB[i]);
  111. }
  112. printf("\n\n");
  113. }
  114.  
  115. int getNextNodeDijkstra(int poids[64], int parcours[64], int antecedent[64], int parent, int Adj[64][64]){
  116. int i;
  117. int min;
  118. parcours[parent] = 1;
  119. for(i=0;i<64;i++){
  120. if(Adj[parent][i] == 1){
  121. int childNode = i;
  122. if(parcours[childNode] == 0){
  123. if(poids[parent] + 1 < poids[childNode] || poids[childNode] == -1){
  124. poids[childNode] = poids[parent]+1;
  125. antecedent[childNode] = parent;
  126. }
  127. }
  128. }
  129. }
  130. min = getMin(poids, parcours);
  131. return min;
  132. }
  133.  
  134. void dijkstra(int depart, int arrivee, int Adj[64][64], int board[8][8]){
  135. int poids[64];
  136. int parcours[64];
  137. int antecedent[64];
  138.  
  139. initPoids(poids, depart);
  140. initTab(parcours);
  141. initPoids(antecedent, depart);
  142.  
  143. int next = depart;
  144. parcours[depart] = 1;
  145. while(antecedent[arrivee]==-1){
  146. next = getNextNodeDijkstra(poids,parcours,antecedent,next, Adj);
  147. }
  148. showBoard(board);
  149.  
  150. int c;
  151. int i = 1;
  152. c = arrivee;
  153. while(c!=depart){
  154. printf("%d <= ", c);
  155. c = antecedent[i]
  156. i++;
  157. }
  158. }
  159.  
  160. int main(){
  161. int board[8][8];
  162. int Adj[64][64];
  163. initBoard(board);
  164. initAdj(Adj);
  165.  
  166. int depart = 0;
  167. int arrivee = 0;
  168. calculateAdj(Adj, board);
  169. showBoard(board);
  170. showAdj(Adj);
  171. dijkstra(depart,arrivee,Adj,board);
  172. return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement