注册 登录
编程论坛 新人交流区

求解汉诺塔

feixue1039 发布于 2007-10-18 20:00, 843 次点击
才刚上三节选修课,老师就让编汉诺塔,晕死,去年上了一年C都美让我们干这个,急用,哪位高手帮帮忙?
10 回复
#2
blosaa2007-10-18 20:06
汉诺塔是什么?你说清楚了,才能把程序做出来撒。
#3
dingpin2007-10-18 20:16

是呀,汉诺塔是什么啊?
你主清楚要什么效果呀...
我们才有针对性的去做呀.....

#4
whfdbccn2007-10-18 21:54
用递归做啊!
#5
xuesong2007-10-18 21:57
提供一个三个的(用c++做的)
多个的自己改一下

#include<iostream.h>
void hanoi(int n,char a,char b,char c)
{
if(n>0)
{
hanoi(n-1,a,c,b);
cout<<a<<"->"<<c<<" ";
hanoi(n-1,b,a,c);
}
}
int main()
{
hanoi(9,'a','b','c');
return 0;
}
#6
xiaocunkele2007-10-19 00:07

我晕,说得太不明白了吧!

#7
baby662007-10-19 15:32
LZ你google 或者baidu下
保证多得吓死你
#8
yoapple2007-10-19 18:18
汉诺塔问题肯定要用递归嘛!
让我告诉大家:
//从initneedle移动n个盘子到endneedle,让tempneedle做中间储存
void hanoi(int n,const string&initneedle,const string&endneedle,const string&tempneedle)
{
//终止条件:只移动一个盘子
if(n==1)
cout<<"move"<<initneedle<<"to"<<endneedle<<eddl;
else {
//从initneedle到tempneedle移动n-1个盘子,用endneedle进行临时储存
hanoi(n-1,initneedle,tempneedle,endneedle);
//最大的盘子到endneedle
cout<<"move"<<initneedle<<"to"<<endneedle<<endl;
//从tempneedle到endneedle移动n-1个盘子,用initneedle进行临时储存
hanoi(n-1,tempneedle,endneedle,initneedle);
}
}
如果对递归理解不够,那末你将会很难理解这个算法.
#9
闲人勿进2007-10-19 18:27

挺难做 的。

#10
zgqken2007-10-19 18:51
这个数据结构那书里有详细解答
#11
neillopv2007-10-19 18:54
C语言里面好象也有
1