close

一般河內塔的作業模式: 
 
   1           |             |
   2           |             |
-------------------------------------

 A
        B         C
=========================
 
   |           |              |
   2         1             |
-------------------------------------

        B         C
=========================
 
   |           |             |
   |          1           2
-------------------------------------

        B         C
=========================
 
   |           |             1
   |           |             2
-------------------------------------

        B         C
=========================
(1)n-1 從A移到B
(2)n    從A移到C
(3)n-1 從B移到C
實作如下:
++++++++++++++++++++++++++++++++++++++

void hanoi (int num, char start, char temp, char end )

{   

   if( num > 0 )

   {

     hanoi ( num-1 , start , end , temp );       /*n-1 從A移到B  */

      printf("%d  %c -> %c  \n" , num, start , end ); /*n    從A移到C  */

     hanoi ( num-1 , temp , start , end);       /* n-1 從B移到C*/

   }

}


int main()

{

    hanoi ( 4 , 'A' , 'B' ,'C' );    /*四個盤子,以A為起始柱,以C為目標柱*/

    return 0;

}

 
 

++++++++++++++++++++++++++++++++++++++
河內塔的作業模式 必須不能跨柱子:

   1           |             |
   2           |             |
-------------------------------------

 A 
        B         C
=========================
 
   |           |              |
   2         1             |
-------------------------------------

        B         C
=========================
   |           |              |
   2          |             1
-------------------------------------

        B         C
=========================
 
     |           |              |
     |          2             1
-------------------------------------

        B         C
=========================
     |          1             |
     |          2             |
-------------------------------------

        B         C
=========================
     |           |              |
    1          2             |
-------------------------------------

        B         C
=========================
 
   |           |             |
  1           
|            2
-------------------------------------

        B         C
=========================
   |           |             |
   |           
1           2
-------------------------------------

        B         C
=========================
   |           |             1
   |           |             2
-------------------------------------

        B         C
=========================
(1)n-1 從A移到B 再 從B移到C
(2)n    從A移到B
(3)n-1 從C移到B 再 從B移到A
(4)n    從B移到C
(5)n-1 從A移到B 再 從B移到C
+++++++++++++++++++++++++++++
實作如下:
++++++++++++++++++++++++++++++++++++++

void hanoi (int num, char start, char temp, char end )

{   

   if( num > 0 )

   {

      hanoi ( num-1 , start, temp, end  );    /*n-1 從A移到B  */     /*n-1 從B移到C  */

       printf("%d  %c -> %c  \n" , num, start , temp ); /*
n    從A移到B  */


     hanoi ( num-1 , end  , temp, start  );     /*n-1 從C移到B  */     /*n-1 從B移到A  */

       printf("%d  %c -> %c  \n" , num, temp end ); /*
n    從A移到B  */
 
     hanoi ( num-1 , start , temp ,end  );   /*n-1 從A移到B  */     /*n-1 從B移到C  */
 


     

   }

}


int main()

{

    hanoi ( 4 , 'A' , 'B' ,'C' );    /*四個盤子,以A為起始柱,以C為目標柱*/

    return 0;

}

 
 
arrow
arrow
    全站熱搜

    rangerll 發表在 痞客邦 留言(0) 人氣()