汉诺塔问题

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助
  • 共有26篇贴子

汉诺塔问题

1楼

我是大三的学生,有道题目一直搞不懂,就是汉诺塔问题!
我不太清楚怎样编写和怎样实现动画效果
希望大家多多帮忙

61.131.58.*

2楼

你自己google或baidu一下.

3楼

http://null.blogchina.com/?&pageno=6

4楼

你最好学一下数据结构中的汉诺塔,那比较清楚。

5楼

怎么搞的,打不开呀
221.12.124.*

6楼

望高手指教

7楼

你做的那是多少个盘子,你可以少做几个盘子,这样的话你的思路就会相对清楚一些。你是想知道怎么写程序,还是想知道怎么样实现动化效果?
60.5.35.*

8楼

汉诺塔问题怎么用鼠标实现???
219.243.0.*

9楼

怎样实现动画效果?一开始是盘从屏幕顶部掉下来,落在三个底盘上,并用三根柱子把它们分别穿起来

10楼

有哪位朋友可以发一个关于汉诺塔的C程序源代码,及其功能注释和设计思路.谢谢了,快!

11楼

我也需要啊 求贤若口渴

12楼

// 汉诺塔 
# include < iostream.h >
void hanoi ( int n, char a, char b, char c )
 { if ( n >= 1 )
 { hanoi ( n-1, a, c, b ) ;
 cout << a << " --> " << c << endl ;
 hanoi ( n-1, b, a, c ) ;
 }
 }
void main ()
 { int m ;
 cout << " Input the number of diskes: " << endl ;
 cin >> m ;
 hanoi ( m, 'A' , 'B' , 'C' ) ;
 }

218.7.185.*

13楼

这个问题我也有点不太懂~!
刚看到帖子~~!!
有谁可以把代码 和算法相关的思路给我呀! 谢谢~!

14楼

12楼只有程序代码.....怎么没有动画的代码啊?

15楼

谁能解释一下N皇后问题,这两个递归我是看不懂了。

16楼

#include"stdio.h" 
void move(char x,char y) 

printf("%c-->%c\n",x,y); 

void hanoi(int n,char one,char two,char three) 

if(n==1)move(one,three); 
else{ 
hanoi(n-1,one,three,two); 
move(one,three); 
hanoi(n-1,two,one,three); 


void main() 
{int m; 
printf("input the number of diskes:"); 
scanf("%d",&m); 
printf("the step to moving %3d diskes:\n",m); 
hanoi(m,'A','B','C'); 

目的:把n个东西从A处移动到C处。 

分析: 
如果只有一个:直接搬过去即可: if(n==1) printf("%c---%c\n",a,c); 
否则,把除最下面的那个以外的先放到b处: hanoi(n-1,a,c,b ); 
再把最下面的那个搬到c处; 
于是问题就变成了:把n-1个东西从b处移动到c处: hanoi(n-1,b,a,c); 
递归就开始了…… 
n-1,n-2,……,2,1 结束 

过程大致就是这样。

17楼

真行啊,
123.232.41.*

18楼

汉诺塔,只需要懂函数调用本身这个事情就可以了
具体为什么是先传A,B,C 再传B,C,A的,这个不需要懂。这是以个实验了很久的答案。不是一个思想就出来的答案。

121.28.7.*

19楼

和教科书一样
222.16.48.*

20楼

各位。他 要的 是要 动画界面。。。。。。。。不只是普通界面那种,应该还要设计一个计算机图形界面
58.213.133.*

21楼

12楼的我来解释一下
// 汉诺塔 
# include < iostream.h > 
void hanoi ( int n, char a, char b, char c ) //从主函数接受参数
 { if ( n >= 1 ) 
 { hanoi ( n-1, a, c, b ) ; //将上面n-1个盘子从a座借助c座移到b座
 cout << a << " --> " << c << endl ; //将最后那个盘子从a移到c
 hanoi ( n-1, b, a, c ) ; //再将b上那n-1个盘子从b借助a移到c
 } 
 } 
void main () 
 { int m ; 
 cout << " Input the number of diskes: " << endl ; 
 cin >> m ; 
 hanoi ( m, 'A' , 'B' , 'C' ) ; //可理解为将n个盘子从A座借助B座移到C座
 } 

至于中间过程不必管
交给电脑去做吧

22楼

#include "stdio.h" 
void move(char x,char y)
{ printf("%c-->%c\n",x,y);
}
void hanoi(int n,char one,char tow,char three)
{ if(n==1)
    move(one,three);
  else
  { hanoi(n-1,one,three,tow);
    move(one,three);
hanoi(n-1,tow,one,three);
  }
}
void main()
{ int m;
  printf("input the number of diskes:");
  scanf("%d",&m);
  printf("the step to moving %d diskes:\n",m);
  hanoi(m,'A','B','C');
}
C语言版本~

23楼

有没有人试过64个塔片?

24楼

楼上的害人啊!!!!

25楼

呵呵
110.6.99.*

26楼

将64个盘子从A移到C需要2^64-1次,假设移动一个盘子需要1s,则移动2^64-1次需要(2^64-1)s,大约相当于6*10^11年,大约600亿年      ——~

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈