題目描述
起源
漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
描述
如下圖所示,從左到右有A、B、C三根柱子,其中A柱子上面有從小疊到大的n個圓盤,現要求將A柱子上的圓盤移到C柱子上去,期間只有一個原則:一次只能移到一個盤子且大盤子不能在小盤子上面,求移動的步驟。
解題思路:
使用遞歸來實現
/*
* @Description: 漢諾塔
* @Author:
* @Date: 2020-05-31 19:07:57
* @LastEditTime: 2020-05-31 19:17:52
* @LastEditors: Please set LastEditors
*/
#include <iostream>
#include <string>
using namespace std;
/**
* @description: 求解漢諾塔的步驟
* @param : n 表示共有多少個盤子
* @return: void
*/
void hanoi(int n, string X, string Y, string Z)
{
if (n == 1)
{
cout << X << "->" << Z << endl;
}
else
{
hanoi(n - 1, X, Z, Y); //將 n-1 從 X 移動到 Y
cout << X << "->" << Z << endl;
hanoi(n - 1, Y, X, Z); //將 n-1 從 Y 移動到 Z
}
}
int main()
{
int n;
cin >> n;
hanoi(n, "X", "Y", "Z");
system("pause");
return 0;
}