汉诺塔问题

王朝c/c++·作者佚名  2006-01-06
窄屏简体版  字體: |||超大  

作为参数传递给函数的栓名为“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

*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航