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]);
}
}
用Java語言解決的漢諾塔問題的代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.