用JAVA編寫漢諾塔程式
漢諾塔問題:三根堅柱和一組中間有洞能在柱子上滑動的盤子,每個盤子有不同的直徑。初始時,所有的盤子按照大小依次堆放在一個柱子上,最大的盤子在最下面。
目標:將所有的盤子從初始的第一根柱子移動到第三根柱子上,可以借用額外的第二根柱子作為臨時存放盤子的地方,但是移動過程中必須遵守以下規則:
1.一次只能移動一個盤子
2.不能把大盤子壓在小盤子上面
3.除去移動的瞬間,所有盤子必須在柱子上。
思想:遞迴。要將N個盤子移到目標柱子上:
(1)將N-1個盤子移動到額外的柱子上
(2)將最大的盤子移到目標柱子上
(3)將N-1個盤子從額外的柱子上移到目標柱子上
- package http;
- public class Tower {
- private int totalDisks;
- public Tower(int totalDisks){
- this.totalDisks=totalDisks;
- }
- public void solve(){
- moveTower(totalDisks,1,3,2);
- }
- private void moveTower(int numDisks,int start,int end,int temp){
- if (numDisks==1)
- moveOneDisk(start,end);
- else{
- moveTower(numDisks-1, start, temp, end);
- moveOneDisk(start,end);
- moveTower(numDisks-1,temp,end,start);
- }
- }
- private void moveOneDisk(int start,int end){
- System.out.println("將一個盤子從"+start+"移動到"+end);
- }
- }
- import http.Tower;
- public class SolveTower {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Tower towers=new Tower(4);
- towers.solve();
- }
- }