CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  非技术区

四个盘的汗诺塔问题!

楼主helei123a()2005-01-03 22:39:08 在 C/C++ / 非技术区 提问

不懂,求解! 问题点数: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

相关问题

  • 汉诺塔!
  • ?最强汉诺塔!!!
  • 汉诺塔动画
  • 汉诺塔问题
  • 汉诺塔的问题
  • 关于汉诺塔问题
  • 汉诺塔的算法
  • 关于汉诺塔问题
  • C_汗偌塔问题(程序的递归)
  • 汉诺塔的非递归算法?

关键词

  • source
  • hanoi
  • tastack
  • 盘子
  • 递归
  • dest
  • move
  • 塔
  • pop
  • tmp

得分解答快速导航

  • 帖主:helei123a

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo