C/C++ 使用遞歸算法實現漢諾塔

漢諾塔原理解析:

當只有一個盤子的時候,只需要從將A塔上的一個盤子移到C塔上。

            當A塔上有兩個盤子是,先將A塔上的1號盤子(編號從上到下)移動到B塔上,再將A塔上的2號盤子移動的C塔上,最後將B塔上的小盤子移動到C塔上。

            當A塔上有3個盤子時,先將A塔上編號1至2的盤子(共2個)移動到B塔上(需藉助C塔),然後將A塔上的3號最大的盤子移動到C塔,最後將B塔上的兩個盤子藉助A塔移動到C塔上。

           當A塔上有n個盤子是,先將A塔上編號1至n-1的盤子(共n-1個)移動到B塔上(藉助C塔),然後將A塔上最大的n號盤子移動到C塔上,最後將B塔上的n-1個盤子藉助A塔移動到C塔上。

          綜上所述,除了只有一個盤子時不需要藉助其他塔外,其餘情況均一樣。

  1. <span style="font-size:14px;">#include <iostream>  
  2. using namespace std;  
  3. int hannuota(int n,string a,string b,string c)  
  4. {  
  5.     if(n==1)  
  6.     {  
  7.         //只有一個盤子的情況下直接將第一個塔上的盤子移動到第三個塔  
  8.         printf("塔%s------>塔%s\n",a.c_str(),c.c_str());  
  9.     }  
  10.     else{  
  11.         //1.先將第一個塔的n-1個盤子全部通過第三個塔移動到第二個塔上  
  12.         hannuota(n-1,a, c, b);  
  13.         //2.再將剩下的一個盤子移動到第三個塔上  
  14.         printf("塔%s------>塔%s\n",a.c_str(),c.c_str());  
  15.         //3.最後將第二個塔上的盤子通過第一個塔移動到第三個塔上  
  16.         hannuota(n-1, b, a, c);  
  17.     }  
  18.     return 1;  
  19. }  
  20. int main(int argc, const char * argv[]) {  
  21.     printf("請輸入盤子的數量:\n");  
  22.     int n;  
  23.     scanf("%d",&n);  
  24.     printf("盤子移動如下:\n");  
  25.     hannuota(n,"A","B","C");  
  26.     return 0;  
  27. }</span>  
發佈了26 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章