📄 汉诺塔的演示程序.htm
字号:
<BR> { <BR> ellipse = new
Ellipse2D.Double(20+i*5, 180-i*10, 180-i*10, 20);
<BR> g2D.fill(ellipse);
<BR> ellipse = new Ellipse2D.Double(220+i*5, 180-i*10,
180-i*10, 20); <BR> g2D.fill(ellipse);
<BR> ellipse = new Ellipse2D.Double(420+i*5, 180-i*10,
180-i*10, 20); <BR> g2D.fill(ellipse);
<BR> <BR> }
<BR> drawEllipse(g, 20, adisk);//画A组盘子
<BR> drawEllipse(g, 220, bdisk);//画B组盘子
<BR> drawEllipse(g, 420, cdisk);//画C组盘子 <BR>
<BR> } <BR> pane.repaint(); <BR> }
<BR> public void update(Graphics g) <BR> { <BR> paint(g);
<BR> } <BR> /**画出椭圆代表盘子,g是图形环境,x是最下面的盘子的横坐标, <BR>*arr是柱子数组 <BR>*/
<BR> public void drawEllipse(Graphics g,int x,int arr[]) <BR> {
<BR> Graphics2D g2D = (Graphics2D)g; <BR> Ellipse2D.Double
ellipse; <BR> g2D.setPaint(Color.gray); <BR> g2D.draw(new
Line2D.Double(x+90, 10, x+90, 180)); <BR> for(int j=arr.length, i=0;
--j>=0; i++ ) <BR> if(arr[j] != 0) <BR> {
<BR> if(i%2 == 0)
<BR> g2D.setPaint(Color.blue);
<BR> else
<BR> g2D.setPaint(Color.red);
<BR> ellipse = new Ellipse2D.Double(x+i*5, 180-i*10,
180-i*10, 20); <BR> g2D.fill(ellipse);
<BR> } <BR> } <BR> public void
actionPerformed(ActionEvent e) <BR> { <BR> String command =
e.getActionCommand(); <BR> if(command.equals(开始)) <BR> {
<BR> /** <BR>*进行初始化,开始的时候只有a柱子上有盘子,其他柱子都没有 <BR>*/
<BR> diskNum = Integer.parseInt(text.getText());
<BR> <BR> adisk = new int[diskNum];
<BR> for(int i=0; i<adisk.length; i++)
<BR> adisk[i] = 1; <BR> bdisk = new
int[diskNum]; <BR> for(int k=0; k<bdisk.length; k++)
<BR> bdisk[k] = 0; <BR> cdisk = new
int[diskNum]; <BR> for(int i=0; i<cdisk.length; i++)
<BR> cdisk[i] = 0; <BR> repaint();
<BR> if(animate == null || !animate.isAlive())//创建一个线程
<BR> { <BR> animate = new Thread(this);
<BR> animate.start(); <BR> }
<BR> } <BR> if(command.equals(停止)) <BR> {
<BR> for(int k=0; k<bdisk.length; k++)
<BR> bdisk[k] = 0; <BR> for(int i=0;
i<cdisk.length; i++) <BR> cdisk[i] = 0;
<BR> repaint(); <BR> text.setText();
<BR> animate = null; <BR> } <BR> }
<BR> /** <BR>*线程方法,在此调用汉诺塔执行移动盘子操作 <BR>*/ <BR> public void run()
<BR> { <BR> hanio(diskNum, 'A', 'B', 'C');
<BR> repaint(); <BR> } <BR> /**
<BR>*汉诺塔递规调用程序,n是盘子的数量,A,B,C分别代表三个柱子 <BR>*/ <BR> public void hanio(int n,
char A, char B, char C) <BR> { <BR> if(n > 1)
<BR> { <BR> hanio(n-1, A, C, B);
<BR> pause();//停顿几秒在执行 <BR> switch(A)
<BR> { <BR> case 'A':adisk[n-1] =
0;break; <BR> case 'B':bdisk[n-1] = 0;break;
<BR> case 'C':cdisk[n-1] = 0;break;
<BR> default:break; <BR> }
<BR> switch(C) <BR> {
<BR> case 'A':adisk[n-1] = 1;break;
<BR> case 'B':bdisk[n-1] = 1;break;
<BR> case 'C':cdisk[n-1] = 1;break;
<BR> default:break; <BR> }
<BR> repaint(); <BR> hanio(n-1, B, A, C);
<BR> } <BR> pause(); <BR>switch(A) <BR> {
<BR> case 'A':adisk[n-1] = 0;break; <BR> case
'B':bdisk[n-1] = 0;break; <BR> case 'C':cdisk[n-1] = 0;break;
<BR> default:break; <BR> } <BR> switch(C)
<BR> { <BR> case 'A':adisk[n-1] = 1;break;
<BR> case 'B':bdisk[n-1] = 1;break; <BR> case
'C':cdisk[n-1] = 1;break; <BR> default:break; <BR> }
<BR> repaint(); <BR> <BR> } <BR><BR>
<BR> /** <BR>*每隔半妙钟移动一个盘子 <BR>*/ <BR> public void pause() <BR> {
<BR> try{ <BR> Thread.sleep(500);//可以修改此值加快盘子移动的速度
<BR> }catch(InterruptedException e){} <BR> } <BR>}</CA></DIV>
<DIV class=gray align=right>回答者:<A
href="http://passport.baidu.com/?detail&aid=7&default_tab=2&un=java118"
target=_blank>java118</A> -<A
href="http://www.baidu.com/search/zhidao_help.html#n5" target=_blank> 举人 五级</A>
1-6 09:50</DIV>
<DIV id=Lg></DIV>
<DIV class=f14B>提问者对于答案的评价:</DIV>
<DIV class="f14 wr">虽然有问题,不过还是最好的 <BR>谢谢了~ <BR>这100分也不能浪费啊,呵呵</DIV>
<DIV id=Lg></DIV>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=f14B noWrap height=25>评价已经被关闭</TD>
<TD align=right>目前有 1 个人评价</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top>
<FORM name=fpj action=http://zhidaocommit.baidu.com/q method=post><INPUT
type=hidden value=22 name=ct><INPUT type=hidden name=mpn><INPUT type=hidden
value=100003 name=cm> <INPUT type=hidden value=2596025 name=qid> <INPUT
type=hidden value=iksubmit name=tn>
<SCRIPT language=javascript>
function g(w){ document.fpj.mpn.value=w;}
document.write("<input type=hidden name=lu value="+ escape(location.href)+">");
</SCRIPT>
<TD class=f14 width=120>好<BR><SPAN class=red>100%</SPAN> (1)</TD>
<TD class=f14 width=120>不好<BR><SPAN class=grn>0%
</SPAN>(0)</TD></FORM></TR></TBODY></TABLE></DIV></DIV>
<DIV class="t3 bcg bgg" style="POSITION: relative">其他回答
<DIV
style="FONT-WEIGHT: normal; FONT-SIZE: 12px; RIGHT: 10px; POSITION: absolute; TOP: 4px">共
2 条</DIV></DIV>
<DIV class="b3 bcg mb12">
<DIV class="p90 wr"><A name=11691654>
<DIV class=f14>var vEngine; <BR>var oEngine = frm.engine; <BR>for (var i = 0; i
< oEngine.length; i++) <BR>{ <BR>if (oEngine[i].checked) <BR>{ <BR>vEngine =
oEngine[i].value; <BR>break; <BR>} <BR>} <BR>var url; <BR>switch(vEngine) <BR>{
<BR>case "google": <BR>url = "<A href="http://images.google.com/images?q="
target=_blank>http://images.google.com/images?q=</A>" + kw +
"&inlang=zh-CN&ie=GB2312&oe=GB2312"; <BR>break; <BR>case "sina":
<BR>url = "<A href="http://pic.sina.com.cn/cgi-bin/retr/search?query="
target=_blank>http://pic.sina.com.cn/cgi-bin/retr/search?query=</A>" + kw;
<BR>break; <BR>case "baidu": <BR>url = "<A
href="http://image.baidu.com/i?z=&s=1&ct=201326592&cl=2&lm=-1&tn=baiduimage&word="
target=_blank>http://image.baidu.com/i?z=&s=1&ct=201326592&cl=2&lm=-1&tn=baiduimage&word=</A>"
+ kw; <BR>break; <BR>case "ys": <BR>url = "<A
href="http://image.yisou.com/search?p="
target=_blank>http://image.yisou.com/search?p=</A>" + kw; <BR>break;
<BR>default: <BR><BR>} <BR>document.getElementById("search").src = url;
<BR>return false; <BR>} <BR>//--> <BR></Script> <BR></HEAD>
<BR><BR><BODY style="text-align: center; margin: 4" scroll="no"
onload="document.all.keyword.focus();"> <BR><form action="" method="GET"
onsubmit="return frmCheck(this);"> <BR><fieldset><legend>Power
Search <sup>©</sup></legend> <BR><table> <BR><tr>
<BR><td><input name="engine" type="radio" value="google" checked>
GOOGLE</td> <BR><td><input name="engine" type="radio"
value="sina"> SINA</td> <BR><td><input name="engine"
type="radio" value="baidu"> 百度</td> <BR><td><input
name="engine" type="radio" value="ys"> 一搜</td> <BR></tr>
<BR><tr> <BR><td colspan="4"><input type="text" name="keyword"
size="30"> <input type="submit" value="搜索(S)"></td>
<BR></tr> <BR></table> <BR></fieldset> <BR></form>
<BR><iframe name="search" id="search" width="100%" height="100%"
scrolling="inherit" frameborder="0"></iframe> </DIV>
<DIV class=gray align=right>回答者:<A
href="http://passport.baidu.com/?detail&aid=7&default_tab=2&un=highcoco"
target=_blank>highcoco</A> - <A
href="http://www.baidu.com/search/zhidao_help.html#n5" target=_blank>试用期 一级</A>
1-6 01:57</DIV>
<DIV id=Lg></DIV><A name=11953765>
<DIV class=f14>根本用不着这么麻烦 <BR>用递归就可以了,虽然内存占用大了一点。 <BR>该问题的基本思路是将A柱的盘子借助B移动到C上去。
<BR>当A柱上的盘子为1时只需1步, <BR>由此建立递归关系。 <BR><BR>或者你心情好,用遍历一遍。 </DIV>
<DIV class=gray align=right>回答者:<A
href="http://passport.baidu.com/?detail&aid=7&default_tab=2&un=%B0%E0%F2%FA"
target=_blank>班蝥</A> - <A href="http://www.baidu.com/search/zhidao_help.html#n5"
target=_blank>助理 二级</A> 1-8 10:19</DIV>
<DIV id=Lg></DIV></DIV></DIV>
<DIV class="b4g mb12">
<FORM onsubmit="return limitpl(this,'评论内容');"
action=http://zhidaocommit.baidu.com/q method=post><INPUT type=hidden value=22
name=ct><INPUT type=hidden value=100011 name=cm><INPUT type=hidden value=93
name=cid> <INPUT type=hidden value=2596025 name=qid><INPUT type=hidden
value=ikreplysubmit name=tn>
<SCRIPT language=javascript>
document.write("<input type=hidden name=lu value="+ escape(location.href)+">");
</SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR vAlign=top>
<TD class=f14 noWrap width="22%">对最佳答案的评论:</TD>
<TD width="78%"><TEXTAREA style="WIDTH: 88%" name=co rows=6 cols=50></TEXTAREA>
<BR>评论字数200字以内 </TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD class=f14 width="22%"> </TD>
<TD width="78%"><INPUT class=bnsrh type=submit value=提交评论>
</TD></TR></TBODY></TABLE></FORM></DIV></DIV></DIV></DIV>
<SCRIPT src="汉诺塔的演示程序.files/zhidao.js"></SCRIPT>
<SCRIPT language=javascript>
var arrBaiduCproConfig=new Array();
arrBaiduCproConfig['n'] = 'baiduiknow_cpr';
arrBaiduCproConfig['tm'] = 24;
arrBaiduCproConfig['cm'] = 60;
arrBaiduCproConfig['um'] = 24;
arrBaiduCproConfig['rad'] = 1;
arrBaiduCproConfig['cad'] = 0;
arrBaiduCproConfig['wn'] = 1;
arrBaiduCproConfig['bg'] = '#ffffff';
arrBaiduCproConfig['tt'] = '#000000';
arrBaiduCproConfig['ct'] = '#000000';
arrBaiduCproConfig['url'] = '#000000';
arrBaiduCproConfig['ta'] = 'right';
arrBaiduCproConfig['tl'] = 'top';
arrBaiduCproConfig['tn'] = 'baiduCPROiknow';
cpro_top_space=700;
cpro_everyadvheight=100;
cpro_maxnum=6;
cpro_num=(document.body.scrollHeight-cpro_top_space)/cpro_everyadvheight;
cpro_num=cpro_num>cpro_maxnum?cpro_maxnum:cpro_num;
cpro_num=parseInt(cpro_num, 10);
arrBaiduCproConfig['hn'] =cpro_num;
if(cpro_num>0){
document.write(baiduCproIFrame());
}
</SCRIPT>
<DIV id=ft>©2006 Baidu</DIV><IMG style="DISPLAY: none" src=""> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -