⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 汉诺塔的演示程序.htm

📁 java版汉诺塔的演示程序 思路是很简单
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<BR>&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;ellipse = new 
Ellipse2D.Double(20+i*5, 180-i*10, 180-i*10, 20); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;g2D.fill(ellipse); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;ellipse = new Ellipse2D.Double(220+i*5, 180-i*10, 
180-i*10, 20); <BR>&nbsp;&nbsp;&nbsp;&nbsp;g2D.fill(ellipse); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;ellipse = new Ellipse2D.Double(420+i*5, 180-i*10, 
180-i*10, 20); <BR>&nbsp;&nbsp;&nbsp;&nbsp;g2D.fill(ellipse); 
<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;} 
<BR>&nbsp;&nbsp;&nbsp;drawEllipse(g, 20, adisk);//画A组盘子 
<BR>&nbsp;&nbsp;&nbsp;drawEllipse(g, 220, bdisk);//画B组盘子 
<BR>&nbsp;&nbsp;&nbsp;drawEllipse(g, 420, cdisk);//画C组盘子 <BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;pane.repaint();&nbsp; <BR>&nbsp;} 
<BR>&nbsp;public void update(Graphics g) <BR>&nbsp;{ <BR>&nbsp;&nbsp;paint(g); 
<BR>&nbsp;} <BR>&nbsp;/**画出椭圆代表盘子,g是图形环境,x是最下面的盘子的横坐标, <BR>*arr是柱子数组 <BR>*/ 
<BR>&nbsp;public void drawEllipse(Graphics g,int x,int arr[]) <BR>&nbsp;{ 
<BR>&nbsp;&nbsp;Graphics2D g2D = (Graphics2D)g; <BR>&nbsp;&nbsp;Ellipse2D.Double 
ellipse; <BR>&nbsp;&nbsp;g2D.setPaint(Color.gray); <BR>&nbsp;&nbsp;g2D.draw(new 
Line2D.Double(x+90, 10, x+90, 180)); <BR>&nbsp;&nbsp;for(int j=arr.length, i=0; 
--j&gt;=0; i++ ) <BR>&nbsp;&nbsp;&nbsp;if(arr[j] != 0) <BR>&nbsp;&nbsp;&nbsp;{ 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(i%2 == 0) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g2D.setPaint(Color.blue); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;else 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g2D.setPaint(Color.red); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;ellipse = new Ellipse2D.Double(x+i*5, 180-i*10, 
180-i*10, 20); <BR>&nbsp;&nbsp;&nbsp;&nbsp;g2D.fill(ellipse); 
<BR>&nbsp;&nbsp;&nbsp;} <BR>&nbsp;} <BR>&nbsp;public void 
actionPerformed(ActionEvent e) <BR>&nbsp;{ <BR>&nbsp;&nbsp;String command = 
e.getActionCommand(); <BR>&nbsp;&nbsp;if(command.equals(开始)) <BR>&nbsp;&nbsp;{ 
<BR>&nbsp;&nbsp;&nbsp;/** <BR>*进行初始化,开始的时候只有a柱子上有盘子,其他柱子都没有 <BR>*/ 
<BR>&nbsp;&nbsp;&nbsp;diskNum = Integer.parseInt(text.getText()); 
<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;adisk = new int[diskNum]; 
<BR>&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;adisk.length; i++) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;adisk[i] = 1; <BR>&nbsp;&nbsp;&nbsp;bdisk = new 
int[diskNum]; <BR>&nbsp;&nbsp;&nbsp;for(int k=0; k&lt;bdisk.length; k++) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;bdisk[k] = 0; <BR>&nbsp;&nbsp;&nbsp;cdisk = new 
int[diskNum]; <BR>&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;cdisk.length; i++) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;cdisk[i] = 0; <BR>&nbsp;&nbsp;&nbsp;repaint(); 
<BR>&nbsp;&nbsp;&nbsp;if(animate == null || !animate.isAlive())//创建一个线程 
<BR>&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;animate = new Thread(this); 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;animate.start(); <BR>&nbsp;&nbsp;&nbsp;} 
<BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;if(command.equals(停止)) <BR>&nbsp;&nbsp;{ 
<BR>&nbsp;&nbsp;&nbsp;for(int k=0; k&lt;bdisk.length; k++) 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;bdisk[k] = 0; <BR>&nbsp;&nbsp;&nbsp;for(int i=0; 
i&lt;cdisk.length; i++) <BR>&nbsp;&nbsp;&nbsp;&nbsp;cdisk[i] = 0; 
<BR>&nbsp;&nbsp;&nbsp;repaint(); <BR>&nbsp;&nbsp;&nbsp;text.setText(); 
<BR>&nbsp;&nbsp;&nbsp;animate = null; <BR>&nbsp;&nbsp;} <BR>&nbsp;} 
<BR>&nbsp;/** <BR>*线程方法,在此调用汉诺塔执行移动盘子操作 <BR>*/ <BR>&nbsp;public void run() 
<BR>&nbsp;{ <BR>&nbsp;&nbsp;hanio(diskNum, 'A', 'B', 'C'); 
<BR>&nbsp;&nbsp;repaint(); <BR>&nbsp;} <BR>&nbsp;/** 
<BR>*汉诺塔递规调用程序,n是盘子的数量,A,B,C分别代表三个柱子 <BR>*/ <BR>&nbsp;public void hanio(int n, 
char A, char B, char C) <BR>&nbsp;{ <BR>&nbsp;&nbsp;if(n &gt; 1) 
<BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;hanio(n-1, A, C, B); 
<BR>&nbsp;&nbsp;&nbsp;pause();//停顿几秒在执行 <BR>&nbsp;&nbsp;&nbsp;switch(A) 
<BR>&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'A':adisk[n-1] = 
0;break; <BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'B':bdisk[n-1] = 0;break; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'C':cdisk[n-1] = 0;break; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;default:break; <BR>&nbsp;&nbsp;&nbsp;} 
<BR>&nbsp;&nbsp;&nbsp;switch(C) <BR>&nbsp;&nbsp;&nbsp;{ 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'A':adisk[n-1] = 1;break; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'B':bdisk[n-1] = 1;break; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;case 'C':cdisk[n-1] = 1;break; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;default:break; <BR>&nbsp;&nbsp;&nbsp;} 
<BR>&nbsp;&nbsp;&nbsp;repaint(); <BR>&nbsp;&nbsp;&nbsp;hanio(n-1, B, A, C); 
<BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;pause(); <BR>switch(A) <BR>&nbsp;&nbsp;{ 
<BR>&nbsp;&nbsp;&nbsp;case 'A':adisk[n-1] = 0;break; <BR>&nbsp;&nbsp;&nbsp;case 
'B':bdisk[n-1] = 0;break; <BR>&nbsp;&nbsp;&nbsp;case 'C':cdisk[n-1] = 0;break; 
<BR>&nbsp;&nbsp;&nbsp;default:break; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;switch(C) 
<BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;case 'A':adisk[n-1] = 1;break; 
<BR>&nbsp;&nbsp;&nbsp;case 'B':bdisk[n-1] = 1;break; <BR>&nbsp;&nbsp;&nbsp;case 
'C':cdisk[n-1] = 1;break; <BR>&nbsp;&nbsp;&nbsp;default:break; <BR>&nbsp;&nbsp;} 
<BR>&nbsp;&nbsp;repaint(); <BR>&nbsp;&nbsp; <BR>&nbsp;} <BR><BR>&nbsp; 
<BR>&nbsp;/** <BR>*每隔半妙钟移动一个盘子 <BR>*/ <BR>&nbsp;public void pause() <BR>&nbsp;{ 
<BR>&nbsp;&nbsp;try{ <BR>&nbsp;&nbsp;&nbsp;Thread.sleep(500);//可以修改此值加快盘子移动的速度 
<BR>&nbsp;&nbsp;}catch(InterruptedException e){} <BR>&nbsp;} <BR>}</CA></DIV>
<DIV class=gray align=right>回答者:<A 
href="http://passport.baidu.com/?detail&amp;aid=7&amp;default_tab=2&amp;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 
&lt; 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 + 
"&amp;inlang=zh-CN&amp;ie=GB2312&amp;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=&amp;s=1&amp;ct=201326592&amp;cl=2&amp;lm=-1&amp;tn=baiduimage&amp;word=" 
target=_blank>http://image.baidu.com/i?z=&amp;s=1&amp;ct=201326592&amp;cl=2&amp;lm=-1&amp;tn=baiduimage&amp;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>//--&gt; <BR>&lt;/Script&gt; <BR>&lt;/HEAD&gt; 
<BR><BR>&lt;BODY style="text-align: center; margin: 4" scroll="no" 
onload="document.all.keyword.focus();"&gt; <BR>&lt;form action="" method="GET" 
onsubmit="return frmCheck(this);"&gt; <BR>&lt;fieldset&gt;&lt;legend&gt;Power 
Search &lt;sup&gt;&copy;&lt;/sup&gt;&lt;/legend&gt; <BR>&lt;table&gt; <BR>&lt;tr&gt; 
<BR>&lt;td&gt;&lt;input name="engine" type="radio" value="google" checked&gt; 
GOOGLE&lt;/td&gt; <BR>&lt;td&gt;&lt;input name="engine" type="radio" 
value="sina"&gt; SINA&lt;/td&gt; <BR>&lt;td&gt;&lt;input name="engine" 
type="radio" value="baidu"&gt; 百度&lt;/td&gt; <BR>&lt;td&gt;&lt;input 
name="engine" type="radio" value="ys"&gt; 一搜&lt;/td&gt; <BR>&lt;/tr&gt; 
<BR>&lt;tr&gt; <BR>&lt;td colspan="4"&gt;&lt;input type="text" name="keyword" 
size="30"&gt; &lt;input type="submit" value="搜索(S)"&gt;&lt;/td&gt; 
<BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;/fieldset&gt; <BR>&lt;/form&gt; 
<BR>&lt;iframe name="search" id="search" width="100%" height="100%" 
scrolling="inherit" frameborder="0"&gt;&lt;/iframe&gt; </DIV>
<DIV class=gray align=right>回答者:<A 
href="http://passport.baidu.com/?detail&amp;aid=7&amp;default_tab=2&amp;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&amp;aid=7&amp;default_tab=2&amp;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%">&nbsp;</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>&copy;2006 Baidu</DIV><IMG style="DISPLAY: none" src=""> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -