用Java语言解决的汉诺塔问题的代码

来源:互联网 发布:淘宝买知网账号靠谱吗 编辑:程序博客网 时间:2024/06/03 22:14
import java.util.Stack;public class HanoiTower {public static final int FLOORCOUNT = 3;// 当FLOORCOUNT等于26时,运行时间为7.7秒左右// 等于27时,15.3秒,等于25时,为3.8秒@SuppressWarnings("rawtypes")Stack[] tower = new Stack[3];public HanoiTower() {}// public@SuppressWarnings("unchecked")public void initial() {for (int i = 0; i < 3; i++) {this.tower[i] = new Stack<Integer>();}for (int i = HanoiTower.FLOORCOUNT; i > 0; i--) {this.tower[0].push(i);}}@SuppressWarnings("unchecked")public void moveXTowerTopsToZTower(int startTowerNumber,int movePlatesCount, int transitTowerNumber, int endTowerNumber) {if (movePlatesCount == 1) {System.out.println(startTowerNumber + "->" + endTowerNumber);this.tower[endTowerNumber].push(this.tower[startTowerNumber].pop());} else {this.moveXTowerTopsToZTower(startTowerNumber, movePlatesCount - 1,endTowerNumber, transitTowerNumber);System.out.println(startTowerNumber + "->" + endTowerNumber);this.tower[endTowerNumber].push(this.tower[startTowerNumber].pop());this.moveXTowerTopsToZTower(transitTowerNumber,movePlatesCount - 1, startTowerNumber, endTowerNumber);}}public void printTower(Stack<Integer> Tower) {System.out.println();while (!Tower.empty())System.out.println(Tower.pop());}/** * @param args */@SuppressWarnings("unchecked")public static void main(String[] args) {// TODO Auto-generated method stubHanoiTower ht = new HanoiTower();ht.initial();long startTime = System.currentTimeMillis();ht.moveXTowerTopsToZTower(0, HanoiTower.FLOORCOUNT, 1, 2);long endTime = System.currentTimeMillis();System.out.println("运行时间为:" + (endTime - startTime) + "ms");ht.printTower(ht.tower[2]);}}