冰楓論壇

標題: [C++] 河內塔問題 [打印本頁]

作者: whitefox    時間: 2023-5-31 23:41
標題: [C++] 河內塔問題
河內塔問題很適合用來練習遞迴技巧(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. }
複製代碼





歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓