1. 程式人生 > >漢諾塔(河內塔)問題:

漢諾塔(河內塔)問題:

漢諾塔 medium 問題 http int logs 一行 移動 else

    漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤,如圖所示:

技術分享

現在請試著編寫一個程序,對於一個有n個盤子的漢諾塔,列舉將這n個盤子從柱子A移動到柱子C需要的所有移動步驟,每個步驟占一行。
  輸入:
    3
  輸出:
    A-->C
    A-->B
    C-->B
    A-->C
    B-->A
    B-->C
    A-->C

#include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 
 5 void move(char src, char dest)
 6 {
 7   cout << src << "-->" << dest << endl;
 8 }
 9 
10 //把n個盤子從src針移動到dest針,以medium為中介
11 void hanoi(int n, char src, char medium, char dest)
12 {
13   if (n == 1
) 14   move(src, dest); //當盤子個數為1時候,直接從A移動到C 15 else 16   //把問題簡單化, 17   //1.首先把A上的n-1個盤子移動到B 18   //2.把A的剩下的一個盤子移動到C 19   //3.把B上的n-1個盤子移動到C 20   { 21     hanoi(n - 1, src, dest, medium); //1.首先把A上的n-1個盤子移動到B 22     move(src, dest); //2.把A的剩下的一個盤子移動到C 23     hanoi(n - 1, medium, src, dest); //3.把B上的n-1個盤子移動到C 24   }
25 } 26 27 int main() 28 { 29   int m; 30   cout << "Enter the number of diskes:"; 31   cin >> m; 32   cout << "the step to moving:\t" << m << " diskes:" << endl; 33   hanoi(m, A, B, C); 34   return 0; 35 }

漢諾塔(河內塔)問題: