用Java語言解決的漢諾塔問題的代碼

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 stub
		HanoiTower 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]);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章