1. 程式人生 > >C++_遞迴實現漢諾塔

C++_遞迴實現漢諾塔

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; }