C++_遞迴實現漢諾塔
阿新 • • 發佈:2019-01-22
A為存放盤子的塔,B為目標塔,C為輔助塔
演算法分為三步
一、將A上n-1個盤子全部放到C塔上
二、將A上剩下的一個盤子放到B塔上
三、將C塔上的盤子全部放到B塔上
注:不需要考慮如何移動n-1個盤子
遞迴過程:
首先,將A上n-1個盤子放到C上,然後將A上剩下的一個盤子放到B上,然後可以看成A為輔助塔,B為目標塔,C為放盤子的(B中有一個最大的盤子,但任何盤子都能放到上面,所以可以看做為空),然後將C上n-2個盤子放到A上,剩下的地n-1個盤子放到B上,此時便完成了一次遞迴,然後不斷地重複上述過程即可
程式碼
#include <iostream>
using namespace std;
void TowersofHanoi(int n,char x,char y,char z)
{
if(n)
{
TowersofHanoi(n-1,x,z,y);//將n-1個盤子從x移動到z
cout << "From" << x << "To" << y << endl;//將第n個盤子移動到y
TowersofHanoi(n-1,z,y,x);//將z上的盤子移動到y
}
}
int main()
{
TowersofHanoi(3,'A','B','C');
return 0;
}