fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. int k; //紀錄有幾個Plate
  6. int *a, *b, *c; //用來製作三個Stack
  7.  
  8. void hanoi(int n, int *form, int *mid, int *to, char a, char b, char c);
  9. int pop(int *pillar);
  10. void push(int temp, int *pillar);
  11. void print(int *a, int *b, int *c, int n);
  12.  
  13. void hanoi(int n, int *form, int *mid, int *to, char ta, char tb, char tc)
  14. {
  15. if(n == 0)
  16. return ;
  17. hanoi(n-1, form, to, mid, ta, tc, tb);
  18. push(pop(form), to);
  19. printf("Move disks %d from %c -> %c\n",n , ta, tc);
  20. print(a, b, c, k-1);
  21. printf("\n");
  22. hanoi(n-1, mid, form, to, tb, ta, tc);
  23. }
  24.  
  25. int pop(int *pillar)
  26. {
  27. int temp;
  28. int i = 0;
  29.  
  30. while(*(pillar+i) != 0)
  31. i++;
  32. i--;
  33. temp = *(pillar+i);
  34. *(pillar+i) = 0;
  35. return temp;
  36. }
  37.  
  38. void push(int temp, int *pillar)
  39. {
  40. int i = 0;
  41. while(pillar[i] != 0)
  42. i++;
  43. *(pillar+i) = temp;
  44. }
  45.  
  46. void print(int *a, int *b, int *c, int n)
  47. {
  48. int i, j;
  49.  
  50. printf("Tower A: ");
  51. for(i = 0; i < n; i++)
  52. printf("%d ", a[i]);
  53. printf("\n");
  54.  
  55. printf("Tower B: ");
  56. for(i = 0; i < n; i++)
  57. printf("%d ", b[i]);
  58. printf("\n");
  59.  
  60. printf("Tower C: ");
  61. for(i = 0; i < n; i++)
  62. printf("%d ", c[i]);
  63. printf("\n");
  64. }
  65.  
  66. int main()
  67. {
  68. int i, n;
  69.  
  70. printf("《Tower of Brahma puzzle》\n\n");
  71. printf("Enter the number of disks: ");
  72. scanf("%d",&n); //輸入圓盤的數量
  73. k = n+1;
  74.  
  75. //創造三個空堆節
  76. a = (int*)malloc(sizeof(int)*k);
  77. b = (int*)malloc(sizeof(int)*k);
  78. c = (int*)malloc(sizeof(int)*k);
  79. memset(a, 0, sizeof(int)*k);
  80. memset(b, 0, sizeof(int)*k);
  81. memset(c, 0, sizeof(int)*k);
  82.  
  83. for(i = 0; i < n; i++)
  84. a[i] = n - i;
  85.  
  86. print(a, b, c, n);
  87. printf("\n");
  88. hanoi(n, a, b, c, 'A', 'B', 'C');
  89. printf("End of the world");
  90.  
  91. return 0;
  92. }
Success #stdin #stdout 0s 4516KB
stdin
3
stdout
《Tower of Brahma puzzle》

Enter the number of disks: Tower A:  3  2  1  
Tower B:  0  0  0  
Tower C:  0  0  0  

Move disks 1 from A -> C
Tower A:  3  2  0  
Tower B:  0  0  0  
Tower C:  1  0  0  

Move disks 2 from A -> B
Tower A:  3  0  0  
Tower B:  2  0  0  
Tower C:  1  0  0  

Move disks 1 from C -> B
Tower A:  3  0  0  
Tower B:  2  1  0  
Tower C:  0  0  0  

Move disks 3 from A -> C
Tower A:  0  0  0  
Tower B:  2  1  0  
Tower C:  3  0  0  

Move disks 1 from B -> A
Tower A:  1  0  0  
Tower B:  2  0  0  
Tower C:  3  0  0  

Move disks 2 from B -> C
Tower A:  1  0  0  
Tower B:  0  0  0  
Tower C:  3  2  0  

Move disks 1 from A -> C
Tower A:  0  0  0  
Tower B:  0  0  0  
Tower C:  3  2  1  

End of the world