Md_Touhid

Tower of Hanoi (Non recursive)

Jan 27th, 2016
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include <stdio.h>
  4. #define MX_SIZE 1024
  5.  
  6. void HANOI( int n , int i , int j , int k ) ;
  7. int stack_n[ MX_SIZE ] ;
  8. int stack_i[ MX_SIZE ] ;
  9. int stack_j[ MX_SIZE ] ;
  10. int stack_k[ MX_SIZE ] ;
  11. int top_n ;
  12. int top_i ;
  13. int top_j ;
  14. int top_k ;
  15. void push_n( int n ) ;
  16. int pop_n( void ) ;
  17. void push_i( int n ) ;
  18. int pop_i( void ) ;
  19. void push_j( int n ) ;
  20. int pop_j( void ) ;
  21. void push_k( int n ) ;
  22. int pop_k( void ) ;
  23. void push( int n , int i , int j , int k ) ;
  24. int pop( int &n , int &i , int &j , int &k ) ;
  25. void empty_stack( void ) ;
  26. int stack_is_empty( void ) ;
  27.  
  28. int main( void ) {
  29.  
  30.     top_n = -1 ;
  31.     top_i = -1 ;
  32.     top_j = -1 ;
  33.     top_k = -1 ;
  34.  
  35.     int disks ;
  36.     scanf( "%d" , &disks ) ;
  37.  
  38.     HANOI( disks , 1 , 2 , 3 ) ;
  39.  
  40.     return 0 ;
  41. }
  42.  
  43. void HANOI( int n , int i , int j , int k ) {
  44.     empty_stack() ;
  45.     push( n , i , j , k ) ;
  46.     while( !stack_is_empty() ) {
  47.         pop( n , i , j , k ) ;
  48.         if( n == 1 ) {
  49.             printf( "move disk from %d to %d\n" , i , k ) ;
  50.         }
  51.         else {
  52.             push( n - 1 , j , i , k ) ;
  53.             push( 1 , i , j , k ) ;
  54.             push( n - 1 , i , k , j ) ;
  55.         }
  56.     }
  57. }
  58.  
  59. void push_n( int n ) {
  60.     top_n = top_n + 1 ;
  61.     stack_n[ top_n ] = n ;
  62. }
  63.  
  64. int pop_n( void ) {
  65.     int number ;
  66.     number = stack_n[ top_n ] ;
  67.     top_n = top_n - 1 ;
  68.     return number ;
  69. }
  70.  
  71. void push_i( int n ) {
  72.     top_i = top_i + 1 ;
  73.     stack_i[ top_i ] = n ;
  74. }
  75.  
  76. int pop_i( void ) {
  77.     int number ;
  78.     number = stack_i[ top_i ] ;
  79.     top_i = top_i - 1 ;
  80.     return number ;
  81. }
  82.  
  83. void push_j( int n ) {
  84.     top_j = top_j + 1 ;
  85.     stack_j[ top_j ] = n ;
  86. }
  87.  
  88. int pop_j( void ) {
  89.     int number ;
  90.     number = stack_j[ top_j ] ;
  91.     top_j = top_j - 1 ;
  92.     return number ;
  93. }
  94.  
  95. void push_k( int n ) {
  96.     top_k = top_k + 1 ;
  97.     stack_k[ top_k ] = n ;
  98. }
  99.  
  100. int pop_k( void ) {
  101.     int number ;
  102.     number = stack_k[ top_k ] ;
  103.     top_k = top_k - 1 ;
  104.     return number ;
  105. }
  106.  
  107. void push( int n , int i , int j , int k ) {
  108.     push_n( n ) ;
  109.     push_i( i ) ;
  110.     push_j( j ) ;
  111.     push_k( k ) ;
  112. }
  113.  
  114. int pop( int &n , int &i , int &j , int &k ) {
  115.     n = pop_n() ;
  116.     i = pop_i() ;
  117.     j = pop_j() ;
  118.     k = pop_k() ;
  119. }
  120.  
  121. void empty_stack( void ) {
  122.     top_n = -1 ;
  123.     top_i = -1 ;
  124.     top_j = -1 ;
  125.     top_k = -1 ;
  126. }
  127.  
  128. int stack_is_empty( void ) {
  129.     if( top_n == -1 && top_i == -1 && top_j == -1 && top_k == -1 ) {
  130.         return 1 ;
  131.     }
  132.     else {
  133.         return 0 ;
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment