作为参数传递给函数的栓名为“start”,“middle”,“end”。一开始提示用户并输入盘子数N然后调用递归函数HANOI一求出将N个盘子以“start”栓移到“end”的移动步骤。整个算法学要2*2*2….2*2(N个)—1次移动。对于10个盘子的情况,次游戏需1023次移动。在测试的例子中,N=3,移动步骤是2*2*2-1=7.
#include<iostream.h>
#include”strdass.h”
//将n个盘子从stratpeg栓移至endpeg栓,用middlepeg作为临时栓。
Void Hanoi(int n, string startpeg,string middlepeg,string endpeg)
{//终止条件:移动一个盘子
if(n==1)
cout<<”move”<<startpeg<<”to”<<endpeg<<endl;
//将n-1个盘子移到middlepeg栓,将底盘移到endpeg栓;
//然后再将n-1个盘子从middlepeg栓移至endpeg栓
else{
Hanoi(n-1,startpeg,endpeg,middlepeg);
Cout<<”move”<<startpeg<<”to”<<endpeg<<endl;
Hanoi (n-1,middlepeg,startpeg,endpeg);
}
}
void main( )
{
//盘子个数机各个栓名
int n;
string startpeg=”start”;
middlepeg=”middle” ;
endpeg=”end”;
// 提示用户输入n并输出n个盘子移动方法
cout<<”Enter the name of disks:”;
cin>>n;
cout<<”The solution for n =” <<n<<endl;
Hanoi (n,startpeg,middlepeg,endpeg);
}
/*<程序运行结果>
Enter the number of disks: 3
The solution for n=3
Move start to end
Move start to middle
Move end to middle
Move start to end
Move middle to start
Move middle to end
Move start to end
*/