四个盘的汗诺塔问题!
不懂,求解! 问题点数:0、回复次数:11Top
1 楼fct0906(bighammer)回复于 2005-01-05 11:38:30 得分 0
最好不要把作业拿出来,
下午有空的话写个看看.Top
2 楼xuelong_zl(点雨点[我身上咋就没MM的香水味涅??#-_-])回复于 2005-01-05 12:14:13 得分 0
先markTop
3 楼dongyuanzhang(阿林)回复于 2005-01-05 13:16:24 得分 0
书上网上都有,自己找阿!就是汗诺塔问题阿!Top
4 楼dongyuanzhang(阿林)回复于 2005-01-05 13:16:56 得分 0
关于递归的算法.Top
5 楼swimmer2000(时间是用来浪费的,所以每当我做了一点事都觉得很自豪)回复于 2005-01-05 14:30:02 得分 0
void move(int i,char a,char b)
{
printf("move %d from %c to %c",i,a,b); //i是盘子的编号
}
hanoi(int n,char x,char y,char z) //n是盘子的个数
{
if n==1
move(1,x,z);
else
{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,z);
}
}Top
6 楼idler(告别teenage)(偶是豆子。。。)(歇业休息。。。)回复于 2005-01-05 14:37:08 得分 0
n个塔都是一样的。。。
把n-1个盘子经C移到B,把最大那个移到C,然后把n-1个盘子经A移到C。Top
7 楼fct0906(bighammer)回复于 2005-01-05 14:52:04 得分 0
typedef stack<int> Tastack;
//assume source is correct initialized.
void Hanoi(int n, Tastack& source, Tastack& tmp, Tastack& dest){
if(n == 1){
dest.push(source.pop());
return;
}else if(n == 2){
tmp.push(source.pop());
dest.push(source.pop());
dest.push(tmp.pop());
}else{
Hanoi(n-1, source, dest, tmp);
dest.push(source.pop());
Hanoi(n-1, tmp, source, dest);
}
}Top
8 楼fct0906(bighammer)回复于 2005-01-05 14:57:25 得分 0
呵呵,楼上手脚很快啊Top
9 楼xuxinmmy(毛毛雨)回复于 2005-01-05 15:12:09 得分 0
#include<stdio.h>
void move(char x,char y)
{ printf("%c-->%c\n",x,y); }
void hanoi(int n,char A,char B,char C)
{ //将n个盘从A座借助B座移到C座
if(n==1) move(A,C);
else
{
hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);
}
}
void main()
{
int num=0;
printf("\n 汉诺塔\n\n");
printf("A-->B\n表示将A座最上面的盘子移到B座\n\n");
printf("输入盘子数量:");
scanf("%d",&num);
printf("移动%d个盘子的步骤如下:\n",num);
hanoi(num,'A','B','C');
printf("移动完毕!\n\n");
}
自己的作业自己做!!刚改成C语言,慢了Top
10 楼melonliu(I believe I can FLY!!)回复于 2005-01-05 15:23:09 得分 0
很多书上都有汉诺塔的递归实现样例啊,非递归实现还可以考虑帮你一下Top
11 楼homtipo()回复于 2005-01-05 18:56:10 得分 0
没有意思的说,只要是讲递归就肯定有这个例子,搞得经典化了Top




