java 解决 汉诺塔问题(递归算法)

来源:互联网 发布:小型学校网络设计 编辑:程序博客网 时间:2024/06/06 00:12

 

import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Exercise6_37 extends JApplet implements ActionListener {int totalNumberOfDisks;int numberOfDisksToMove;int singularityPillar = 1;int doomPillar = 3;int tempPillar = 2;int stepsCounter = 0;JLabel inputLabel;JTextField inputField;JTextArea outputArea;JScrollPane scroller;public void init() {Container container = getContentPane();container.setLayout(new FlowLayout());inputLabel = new JLabel("输入盘子的总数:");container.add(inputLabel);inputField = new JTextField(15);inputField.addActionListener(this);container.add(inputField);outputArea = new JTextArea(18, 15);scroller = new JScrollPane(outputArea);container.add(scroller);}public void actionPerformed(ActionEvent actionEvent) {outputArea.setText("");stepsCounter = 0;totalNumberOfDisks = Integer.parseInt(inputField.getText());numberOfDisksToMove = totalNumberOfDisks;tower(numberOfDisksToMove, singularityPillar, doomPillar, tempPillar);outputArea.append("\n\n共需要 " + stepsCounter + "步!");}public void tower(int numberOfDisksToMove, int pillarNoDisksAt,int pillarNoDisksMoveTo, int tempPillar_) {if (numberOfDisksToMove == 1) {outputArea.append("第 " + (++stepsCounter) + "步:" + pillarNoDisksAt+ " -> " + pillarNoDisksMoveTo + "\n");} else {tower(numberOfDisksToMove - 1, pillarNoDisksAt, tempPillar_,pillarNoDisksMoveTo);tower(1, pillarNoDisksAt, pillarNoDisksMoveTo, tempPillar);tower(numberOfDisksToMove - 1, tempPillar_, pillarNoDisksMoveTo,pillarNoDisksAt);}}}