四个盘的汗诺塔问题!

helei123a 2005-01-03 10:39:08
不懂,求解!
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelong_zl 2005-01-05
  • 打赏
  • 举报
回复
先mark
fct0906 2005-01-05
  • 打赏
  • 举报
回复
最好不要把作业拿出来,

下午有空的话写个看看.
homtipo 2005-01-05
  • 打赏
  • 举报
回复
没有意思的说,只要是讲递归就肯定有这个例子,搞得经典化了
melonliu 2005-01-05
  • 打赏
  • 举报
回复
很多书上都有汉诺塔的递归实现样例啊,非递归实现还可以考虑帮你一下
xuxinmmy 2005-01-05
  • 打赏
  • 举报
回复
#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语言,慢了
fct0906 2005-01-05
  • 打赏
  • 举报
回复
呵呵,楼上手脚很快啊
fct0906 2005-01-05
  • 打赏
  • 举报
回复
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);
}
}
idler 2005-01-05
  • 打赏
  • 举报
回复
n个塔都是一样的。。。
把n-1个盘子经C移到B,把最大那个移到C,然后把n-1个盘子经A移到C。
swimmer2000 2005-01-05
  • 打赏
  • 举报
回复
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);
}
}
dongyuanzhang 2005-01-05
  • 打赏
  • 举报
回复
关于递归的算法.
dongyuanzhang 2005-01-05
  • 打赏
  • 举报
回复
书上网上都有,自己找阿!就是汗诺塔问题阿!

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧