Java实现汉诺塔 -- JAVA 算法学习

本文介绍了经典的汉诺塔问题及其解决方法,并通过递归算法实现了汉诺塔问题的解决方案。文中详细解释了递归函数的工作原理,并提供了一个完整的Java实现示例。

呐  下图这个就是汉诺塔啦~小时候可是经常玩呢,大家都知道它的解决规则与步骤啦~那怎嚰用用代码来描绘一下呢~

分析:规则很简单,我们发现当只有一层时,我们直接可以把所有(一个)的小环移到目标柱子上,当大于2时,我们发现,我们必须先把上面的N-1层移到辅助的柱子(目标柱子以外的两个都是辅助柱子)上,才能把第N层的小环移到目标柱子,是不是发现啦~我们只需要写一个递归函数,每次把第N-1上的所有环移到辅助的柱子,这样就可以一层一层的把小环从大到小移到目标柱子了呢~~~



publicclassHanoiTest {
      privatestaticintcount=0;
      publicvoidhanoi(intn,charx,chary,charz){
            if(n==1)
                  move(1,x,z);
            else{
                  hanoi(n-1,x,z,y);
                  move(n,x,y);
                  hanoi(n-1,y,z,x);
            }
      }
      publicvoidmove(intn,chara,charb){
            count++;
            System.out.println("第"+count+"步:"+"将"+n+"从"+a+"移到"+b);
      }
      publicstaticvoidmain(String[]args) {
            System.out.println("请输入汉诺塔的高度:");
            Scannerscanner=newScanner(System.in);
            intn=scanner.nextInt();
         /*int[] hanoi1 = newint[n],hanoi2 = newint[n],hanoi3 = newint[n];
            for(inti=0;i<n;i++){
                  hanoi1[i]=i+1;
                  hanoi2[i]=0;
                  hanoi3[i]=0;
            }*/
            HanoiTesthanoiTest=newHanoiTest();
            hanoiTest.hanoi(n,'x','y','z');
      }
}
Java语言编写的汉诺塔程序,形象直观; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Tower extends Frame implements ActionListener,Runnable { HannoiTower tower=null; Button renew,auto=null; char towerName[]={'A','B','C'}; int 盘子数目,盘宽,盘高; Thread thread; TextArea 信息条=null; public Tower() { thread=new Thread(this); 盘子数目=5; 盘宽=80; 盘高=18; 信息条=new TextArea(12,12); 信息条.setText(null); tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条); renew=new Button("重新开始"); auto=new Button("自动演示搬盘子"); renew.addActionListener(this); auto.addActionListener(this); add(tower,BorderLayout.CENTER); add(renew,BorderLayout.SOUTH); add(auto,BorderLayout.NORTH); add(信息条,BorderLayout.EAST); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); setBounds(60,20,670,540); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==renew) { if(!(thread.isAlive())) { this.remove(tower); 信息条.setText(null); tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条); add(tower,BorderLayout.CENTER); validate(); } else { } } if(e.getSource()==auto) { if(!(thread.isAlive())) { thread=new Thread(this); } try { thread.start(); } catch(Exception eee) { } } } public void run() { this.remove(tower); 信息条.setText(null); tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条); add(tower,BorderLayout.CENTER); validate(); tower.自动演示搬运盘子(盘子数目,towerName[0] ,towerName[1],towerName[2]); } public static void main(String args[]) { new Tower(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值