易码技术论坛

 找回密码
 加入易码
搜索
查看: 191583|回复: 10

[原创]解汉诺塔

[复制链接]
发表于 2005-5-8 14:53:00 | 显示全部楼层
附源文件
0 OKE 1024,0
15 TP%=1:INPUT "塔的层数:";I:IF I<1 15 THEN CLS :15
18 DIM N%(I),P%(I),Q%(I),R%(I),H%(2):N%(1)=I:GRAPH
20 FOR I=0 TO 2INE 30+I*50,0,30+I*50,N%(1)*5+5:NEXT INE 2,N%(1)*5+5,158,N%(1)*5+5
25 FOR I=1 TO N%(1):BOX 30-I*2,I*5,30+I*2,I*5+3,1,2:NEXT
30 HP%(0)=0:HP%(1)=N%(1):HP%(2)=N%(1)
40 P%(1)=0
50 Q%(1)=1
60 R%(1)=2
70 IF (TP%=1)AND (N%(TP%)=1)GOTO 170
80 WHILE N%(TP%)>1
90 N%(TP%+1)=N%(TP%)-1%(TP%+1)=P%(TP%)%(TP%+1)=R%(TP%):R%(TP%+1)=Q%(TP%):TP%=TP%+1
100 WEND
110 GOSUB 210
120 IF TP%<=1 GOTO 160
130 TP%=TP%-1
140 GOSUB 210
150 N%(TP%)=N%(TP%)-1:SWAP P%(TP%),Q%(TP%)
160 GOTO 70
170 N%(TP%)=1:GOSUB 210
180 TP%=TP%-1
190 BEEP :BEEP : INKEY$ :BOX 0,0,60,80,1,0
200 PRINT " 完成!"," 移动"," ";TIME,"  次"
202 BOX 0,0,60,70,1,2
205 BOX 2,1,63,73,1,2:A$= INKEY$ :CLS
206 PRINT "最少移动2^N-1次,N为盘子只数;可以归纳证明","TIME(N)=2TIME(N-1)+1","而TIME(1)=1…"
207 PRINT "呵呵";:A$= INKEY$ :CLS
208 PRINT "30只呢?"," 2^30-1=",2^30-1,"够你玩一辈子了";:END
209 **************************************DRAW THE TOWER ************************************
210 S%=P%(TP%)
220 D%=R%(TP%):HP%(S%)=HP%(S%)+1
240 BOX S%*50+30-N%(TP%)*2,HP%(S%)*5,S%*50+30+N%(TP%)*2,HP%(S%)*5+3,1,2
250 BOX D%*50+30-N%(TP%)*2,HP%(D%)*5,D%*50+30+N%(TP%)*2,HP%(D%)*5+3,1,2
260 HP%(D%)=HP%(D%)-1:TIME=TIME+1
270 RETURN

发表于 2005-5-10 13:24:00 | 显示全部楼层
速度太快,看不清。
发表于 2005-5-14 07:28:00 | 显示全部楼层
208 PRINT "30只呢?"," 2^30-1=",2^30-1,"够你玩一辈子了";:END
这个经典,哈!!
厉害...!速度很快哦..!代码精简!
 楼主| 发表于 2005-5-15 14:03:00 | 显示全部楼层
谢谢楼上夸奖
回上上楼:速度快?太容易了
在draw the tower 那段加点延时就可以了
要是太慢就难解决了
发表于 2005-5-15 17:32:00 | 显示全部楼层
汉诺塔是任何一种语言学习递归调用的例子,经典
 楼主| 发表于 2005-5-25 13:31:00 | 显示全部楼层
程序没用递规(gvbasic里根本不能用递规)
而是把递规展开了
发表于 2005-5-25 17:10:00 | 显示全部楼层
我从来在脑子里递归……汉诺塔是星星里面我最喜欢的游戏之一~因为我们这里没有人能玩的过我~吼吼!!
 楼主| 发表于 2005-5-26 14:27:00 | 显示全部楼层
汗~
要是楼上在脑子里递归玩十层以上的汉诺塔并且脑袋没有发生out of memory error
那我建议你在脑子里运行大型应用程序比如3DMARK、PCMARK检验一下自己的得分
发表于 2005-5-26 17:22:00 | 显示全部楼层
怎么说呢~我玩汉诺塔有自己的一套方法~基本不需要思考~只要时间允许~N个子都行~不过我算了下~30个子假如我每秒走一步并且一直不停~貌似我需要34年才能走完~
WQX上9个子的我常走~7个以下的我不看屏幕都能完成……
发表于 2005-5-28 14:02:00 | 显示全部楼层
确实有一定规律,跟盘子的奇偶有关。如果是奇数就把最上一个盘子移到要移的位置,偶数则移到另一个位置,以次类推。
从来不玩汉诺塔,因为没有挑战性。
[em05][em05][em05][em05][em05]
 楼主| 发表于 2005-5-8 14:51:39 | 显示全部楼层 |阅读模式
我做的basic用来解汉诺塔,速度还可以

基本通用,呵呵

发来玩玩,没什么用

呵呵


您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-4-28 02:52 , Processed in 0.014051 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表