开元周游
德国频道
查看: 2105|回复: 6
打印 上一主题 下一主题

汗诺塔的堆栈实现,挺经典

[复制链接]
1#
发表于 22.9.2003 03:03:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
2#
发表于 22.9.2003 17:40:47 | 只看该作者
<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->stack.push(new Quad(n-1,y,x,z));<br>stack.push(new Quad(1,x,y,z));<br>stack.push(new Quad(n-1,x,z,y));<br><!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd--><br>这里有误,应当是:<br><span style='color:blue'>stack.push(new Quad(n-1,x,z,y));<br>stack.push(new Quad(1,x,y,z));<br>stack.push(new Quad(n-1,y,x,z));</span><br>次序不能颠倒的,我想。
3#
发表于 22.9.2003 17:49:48 | 只看该作者
用递归的方法,两种可以比较一下。<br>public class Hanoi{<br>public static void main(String[] args)<br>{ hanoi(3,&#39;A&#39;,&#39;B&#39;,&#39;C&#39;); // play the game with 3 disks<br>}<br>private int step=0;<br>void prt(int n,int from,int to){<br>System.out.println(&quot;Step &quot;+(++step)+&quot; move &quot;+n+&quot; from stab &quot;+from+&quot; to &quot;+to);<br>}<br>public static void hanoi(int n,int from,int extra,int to){<br>if(n==1) prt(1,from,to);<br>else{ hanoi(n-1,from,to,extra);<br>prt(n,from ,to);<br>hanoi(n-1,extra,from,to);<br>}<br>return;<br>}<br>}
4#
 楼主| 发表于 22.9.2003 22:18:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
5#
发表于 23.9.2003 13:54:19 | 只看该作者
啊,是啊,我都忘了。 <!--emo&(y)--><img src='https://www.kaiyuan.info/modules/ipboard/html/emoticons/thumbs_up.gif' border='0' style='vertical-align:middle' alt='thumbs_up.gif'><!--endemo-->  
6#
发表于 24.9.2003 23:30:13 | 只看该作者
我们当年是用scheme实现的,忘了是怎么写的了,好像挺复杂,不过rekursive的问题本身就很复杂<br>
7#
发表于 26.9.2003 16:01:45 | 只看该作者
用SCHEME语言来实现:<br><br>(define (hanoi n from extra to)<br>  (define (prt n from to) <br>     (begin (display &quot;move &quot;)<br>            (display n)<br>            (display &quot; from &quot;)<br>            (display from)<br>            (display &quot; to &quot;)<br>            (display to)<br>      ))<br>  (define (hanoi-rek n from extra to)<br>     (if (= n 1) (prt 1 from to) <br>                 (begin (hanoi-rek (- n 1) from to extra)<br>                        (prt n from to)<br>                        (hanoi-rek (- n 1) extra from to)<br>                 )<br>     ))<br>)<br>       <br>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点信息

站点统计| 举报| Archiver| 手机版| 小黑屋

Powered by Discuz! X3.2 © 2001-2014 Comsenz Inc.

GMT+1, 26.12.2024 05:44

关于我们|Apps

() 开元网

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