package com.struc;
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
public class Hanoi extends JFrame {
private static final long serialVersionUID = 1L;
static int n = Integer.parseInt(JOptionPane
.showInputDialog("输入盘子数目 int:"));
static int time = Integer.parseInt(JOptionPane
.showInputDialog("输入移动盘子的频率 int:"));
static int num = 0;
static char[] array = new char[n];
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("HanoiZiJiZuo 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) {
// Stopping condition
if (a == 1) {
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) {
}
}
}
分享到:
相关推荐
数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。上海交通大学的数据结构课件是学习这一主题的重要资源,它涵盖了广泛的知识点,帮助学生深入理解数据结构...
### 数据结构基础知识点详解 #### 一、基础知识概念解析 **1. 算法的复杂性** - **题目**: 算法的计算量的大小称为计算的()。 - **答案**: B. 复杂性 - **解析**: 算法的复杂性通常用来衡量算法执行效率的...
西安理工大学863数据结构真题集锦 作为一名 IT 行业大师,我将根据提供的文件信息,生成相关的知识点,以下是详细的输出结果: 一、数据结构概述 数据结构是计算机科学中的一门基础学科,旨在研究如何存储和组织...
数据结构是计算机科学中的核心课程,它探讨如何高效地组织和管理数据,以便进行快速查找、插入和删除等操作。这份“数据结构1800试题”提供了丰富的练习题目,涵盖了数据结构的主要概念和算法,适合学生进行复习和...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便于快速查找、存储和处理。这份“数据结构的pdf课件”是学习这一主题的重要资源,尤其对于初学者来说,它能提供系统性的指导和...
数据结构是计算机科学中的核心概念,它涉及到如何在计算机中有效地组织、存储和处理大量数据。数据结构的设计和选择直接影响到算法的效率以及程序的性能。在这个领域,我们研究各种不同的数据组织方式,如数组、链表...
"数据结构(第4版)习题及实验参考答案-数据结构复习资料完整版(c语言版)" 本文档是关于数据结构的习题及实验参考答案,涵盖了数据结构的基础知识、逻辑结构、物理结构、算法、时间复杂度等方面。 数据结构基础 ...
"Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的知识点总结: 栈和队列 * 栈和队列的共同特点是只允许在端点处插入和删除元素。 * 栈通常采用的两种存储结构是线性存储结构和链表存储结构...
### 数据结构的基本概念 数据结构是计算机存储、组织数据的方式。它旨在使数据的存取和处理更加高效。数据结构通常由数据对象和数据关系两部分构成。数据对象是指具有相同数据类型的元素的集合;数据关系则定义了...
数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。唐发根教授的数据结构教程是一部深受初学者欢迎的教材,它全面且深入地介绍了数据结构的基本概念、算法和...
"数据结构和算法分析 C++版 第三版" 本资源是《数据结构和算法分析 C++版 第三版》的摘要信息,作者是Clifford A. Shaffer,来自 Virginia Tech 的计算机科学系。该书将数据结构和算法分析的基本概念和技术进行了...
【北京邮电大学809数据结构复习指南】是一份由成功上岸北邮AI院的学长编写的详尽复习资料,旨在帮助备考北邮研究生考试的学生,特别是那些选择809数据结构作为专业课的考生。复习指南依据北邮研究生招生网的考试大纲...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据。在准备考研的道路上,深入理解和掌握数据结构至关重要,因为它是算法设计和分析的基础。"考研王道数据结构代码.zip"这个压缩包包含...
数据结构题集(C语言版)完整答案 本资源提供了数据结构题集的完整答案,涵盖了数据结构的基本概念、抽象数据类型、存储结构、数据类型等方面的知识点。下面是对资源中提到的知识点的详细解释: 1. 数据结构的基本...
数据结构是计算机科学中至关重要的基础概念,它研究的是非数值计算问题中计算机的数据组织方式、它们之间的关系以及相应的操作。本章主要介绍了数据结构的基本概念、抽象数据类型(ADT)的定义与实现,以及如何用类...
《数据结构习题解析》由唐发根编著,是为高等教育学历文凭考试计算机专业考生提供的辅导教材。该书与唐发根所著的主教材《数据结构》配套使用,内容上严格对应主教材的章节顺序,每章节都涵盖了学习要点、习题解析及...
数据结构是计算机科学与技术领域中的核心课程之一,它研究如何在计算机中组织和存储数据,以便高效地访问和修改。严蔚敏教授编著的《数据结构》是一本广泛被采用的经典教材,深受广大计算机专业学生和研究人员的青睐...
本书从讲解什么是数据结构开始,延伸至高级数据结构和算法分析,强调数据结构和问题求解技术。本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍,试图包含有关数据结构、算法分析及其Java实现的所有...
"西北民族大学--数据结构考试卷答案.pdf" 以下是根据提供的文件信息生成的相关知识点: 数据结构定义 数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。 数据结构分类 数据结构可以分为...
数据结构是计算机科学的基础课程,它探讨如何有效地组织和管理数据,以便进行高效的数据操作。在C语言描述下,耿国华的《数据结构》教材是深入理解这一主题的重要资源,而课后习题答案则提供了检验学习效果的途径。 ...