java 汉诺塔的演示程序

原创 2007年09月12日 08:37:00
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;


public class Hanoi extends JFrame
{
        static int n=Integer.parseInt(JOptionPane.showInputDialog("Enter number of disks:"));
        static int time=Integer.parseInt(JOptionPane.showInputDialog("Enter the move frequency of disks:"));
        static int num=0;
        static char[] array=new char[n];
        private static Thread animate;
       
        MyPanel panel =new MyPanel();
        static String string="";
        static JTextArea text=new JTextArea();
       
       
       
        public Hanoi()
        {
                getContentPane ().setLayout (new BorderLayout());
                getContentPane ().add (new JScrollPane(text),BorderLayout.EAST);       
                getContentPane ().add (panel,BorderLayout.CENTER);
               

        }
       
        public static void main (String[] args)
        {
                for(int i=0;i<n;i++)
                {
                        array[i]='A';
                }
                Hanoi hanoi=new Hanoi();
                hanoi.setTitle("Hanoi Tower");
                hanoi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                hanoi.setSize(1450, 400);
                hanoi.setVisible(true);
                hanoi.moveDisks(n, 'A', 'C', 'B');
        }
       
        public class MyPanel extends JPanel
        {
               
                public void paintComponent(Graphics g)
                {
                super.paintComponent(g);
                        g.setColor(Color.RED);
                        g.drawLine(50,310,1100,310);
                        g.fillRect(200,10,10,300);
                        g.drawString("A", 203, 340);
                        g.fillRect(500,10,10,300);
                        g.drawString("B", 503, 340);
                        g.fillRect(800,10,10,300);
                        g.drawString("C", 803, 340);
                        draw(g);
                        repaint();
                }
                void draw(Graphics g)
                {
                        g.setColor(Color.YELLOW);
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1.0)]=='A')
                                {
                                        g.fillOval(205-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 203, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1)]=='B')
                                {
                                        g.fillOval(505-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 503, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1)]=='C')
                                {
                                        g.fillOval(805-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 803, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                       
                       
                       
                        g.setColor(Color.BLACK);
                }
               
               
        }
        public  void moveDisks(int a, char fromTower,char toTower, char auxTower)
        {
               
                       
               
                if (a == 1) // Stopping condition
                {
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+"         ./n";
                        text.setText(string);
                        array[a-1]=toTower;
                        pause();
                }
                else
                {
                        moveDisks(a - 1, fromTower, auxTower, toTower);
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+ "         ./n";
                        text.setText(string); 
                        array[a-1]=toTower;
                        pause();
                        moveDisks(a - 1, auxTower, toTower, fromTower);

                }
       
        }
               
        public static void pause()
        {
                try
                {
                        Thread.sleep(time*100);//可以修改此值加快盘子移动的速度
                }
                catch(InterruptedException e)
                {
                }
        }
       
}

汉诺塔程序(可演示)代码

import java.applet.Applet;import java.applet.AudioClip;import java.awt.*;import java.awt.event.*;imp...
  • dedelili
  • dedelili
  • 2007年10月16日 21:08
  • 830

利用递归算法实现n层汉诺塔动画演示MATLAB代码以及解释

利用递归算法实现汉诺塔的动画演示,以三层汉诺塔为契机从而推广至n层汉诺塔的matlab实现...
  • qq_36402402
  • qq_36402402
  • 2017年05月20日 18:48
  • 1361

[js - 算法可视化] 汉诺塔(Hanoi)演示程序

前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好。 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔。 另外在这个程序里面,实现了一点,就是...
  • isea533
  • isea533
  • 2013年08月30日 14:46
  • 7064

java实现汉诺塔算法

package com.ywx.count; import java.util.Scanner; /**  * @author Vashon  * date:20150410  *   * 题...
  • yangwenxue_admin
  • yangwenxue_admin
  • 2015年04月10日 14:14
  • 3567

利用Python写的展示汉诺塔(hanoi)解法的小程序_Prj003

利用Python和递归算法,动态展示汉诺塔的解法
  • PosPro
  • PosPro
  • 2015年09月03日 21:03
  • 1487

"汉诺塔"算法-之通俗易懂,简单的原理-java编程

1.汉诺塔 2.三步曲 3.递归
  • nzfxx
  • nzfxx
  • 2016年06月04日 14:22
  • 6403

java学习之汉诺塔游戏

汉诺塔游戏 问题描述: 1.有三根杆子A,B,C。A杆上有若干碟子 ;  2.每次移动一块碟子,小的只能叠在大的上面;   3.把所有碟子从A杆全部移到C杆上; 解决思路: 1.首先我们可...
  • Mark_marui
  • Mark_marui
  • 2016年11月21日 21:25
  • 319

汉诺塔的Java实现

思路:将n个圆盘从柱子1移动到柱子3,按照大的圆盘在最下面的顺序依次往上堆放,每一步只能把某个柱子最上面的一个圆盘移到另一个柱子上面,要解决这个问题,由于要把圆盘从柱子1移到柱子3,必须先将最大的盘子...
  • sinat_26464559
  • sinat_26464559
  • 2016年03月30日 01:04
  • 1181

Java 递归实现汉诺塔问题

汉诺塔问题就是:有ABC三根柱子,A柱子上从上到下摞了很多体积依次递增的圆盘,如果将圆盘从A移动到C柱子,且依然保持从上到下依次递增。 class Hanio{ public void moveO...
  • lingzhm
  • lingzhm
  • 2015年04月10日 21:47
  • 1972

用java语言实现汉诺塔的演示程序

利用传统的递规算法实现汉诺塔的演示程序。源代码:/** *本程序完成的功能是利用汉递规算法实现汉诺塔的动态演示程序 */import javax.swing.*;import java.awt.geo...
  • hengshan
  • hengshan
  • 2005年11月13日 19:45
  • 4068
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 汉诺塔的演示程序
举报原因:
原因补充:

(最多只允许输入30个字)