冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 876|回覆: 0
打印 上一主題 下一主題

[心得] [C++] 河內塔問題

[複製鏈接]

827

主題

0

好友

856

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1605
主題
827
精華
0
積分
856
楓幣
11181
威望
396
存款
10100
贊助金額
1800
推廣
0
GP
2693
閱讀權限
150
在線時間
190 小時
註冊時間
2023-5-18
最後登入
2024-11-26

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章

跳轉到指定樓層
1
發表於 2023-5-31 23:41:28 |只看該作者 |倒序瀏覽
河內塔問題很適合用來練習遞迴技巧(Recursion)跟分治法的演算法技巧(Divide and Conquer)
這個程式碼輸入要放幾個盤子,執行過程也可以顯示要搬移第幾個盤子從哪個柱子到哪個住子
  1. #include <iOStream>
  2. #include <cstdlib>

  3. using namespace std;

  4. long int times;

  5. void Hanoi(int disks, int src, int dst, int No)
  6. {
  7.     if ( disks == 1 )
  8.     {
  9.         cout << ++times << ": Move Disk." << No << " (" << src << ") → (" << dst << ")" << endl;
  10.         return;
  11.     }
  12.    
  13.     // 棒子編號 1 2 3 編號總和 6
  14.     int aux = 6 - src - dst;
  15.    
  16.     Hanoi((disks-1), src, aux, (No-1));
  17.     Hanoi(1, src, dst, No);
  18.     Hanoi((disks-1), aux, dst, (No-1));
  19. }

  20. int main(void)
  21. {
  22.     int count;
  23.    
  24.     cout << "輸入盤子數:";
  25.     cin >> count;
  26.    
  27.     times = 0;
  28.     Hanoi(count, 1, 2, count);
  29.    
  30.     cout << "------------" << endl;
  31.     cout << "移動" << count << "個盤子,需要移動" << times << "次";
  32.    
  33.     system("pause");
  34. }
複製代碼
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-27 15:59

回頂部