漢諾卡Hanoi問題詳解

有三根相鄰的柱子,標號爲A,B,C,A柱子上從下到上按金字塔狀疊放着n個不同大小的圓盤,要把所有盤子一個一個移動到柱子B上,並且每次移動同一根柱子上都不能出現大盤子在小盤子上方,請問至少需要多少次移動,設移動次數爲H(n)。

#include<iostream>
using namespace std;
//例如有N和盤子在A柱子上,要移到C上,B是中轉站作用。
//分解簡化一下問題,
//①   我需要把N-1個盤子先移到B上,
//②   再把剩下的1個盤子從A移動到C,直接輸出即可
//③   然後把B上的N-1歌盤子移動到C,
//就完成了
//然後用這個思想寫出遞歸
//如下
//漢諾卡問題
void Hanoi(int n,char a,char b,char c)//A到C,B做中轉
{
    if (n==1)//若就一個盤子,就直接A到C,沒毛病吧,老鐵?
    {
        cout << a << "--->" << c << endl;//輸出步驟
        return;
    }
    Hanoi(n-1,a,c,b);//①   //A到B,C做中轉
    cout << a << "--->" << c << endl;//②
    Hanoi(n-1,b,a,c);//③   //B到C,A做中轉
    return;
}

int main()
{
    int n;
    cin >> n;
    Hanoi(n,'A','B','C');
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章