您的位置:首页 > 编程语言 > Java开发

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

2012-10-05 19:56 591 查看
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]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: