溫馨提示×

java怎么解決漢諾塔問題

小億
82
2024-09-26 03:47:06
欄目: 編程語言

漢諾塔問題是一個經典的遞歸問題

  1. 首先,我們需要定義一個漢諾塔的類,其中包含三個變量:源柱子(source)、輔助柱子(auxiliary)和目標柱子(target)。
public class HanoiTower {
    private int source;
    private int auxiliary;
    private int target;

    public HanoiTower(int source, int auxiliary, int target) {
        this.source = source;
        this.auxiliary = auxiliary;
        this.target = target;
    }
}
  1. 接下來,我們需要定義一個遞歸方法moveDisk,該方法接受四個參數:漢諾塔對象、源柱子上的磁盤數量、輔助柱子和目標柱子。
public void moveDisk(HanoiTower tower, int n, int from, int to, int via) {
    if (n == 1) {
        System.out.println("Move disk 1 from " + from + " to " + to);
    } else {
        moveDisk(tower, n - 1, from, via, to);
        System.out.println("Move disk " + n + " from " + from + " to " + to);
        moveDisk(tower, n - 1, via, to, from);
    }
}
  1. 最后,我們可以在主方法中創(chuàng)建一個漢諾塔對象,并調用moveDisk方法來解決問題。
public class Main {
    public static void main(String[] args) {
        HanoiTower tower = new HanoiTower(1, 2, 3);
        moveDisk(tower, 3, 1, 3, 2);
    }
}

運行上述代碼,你將看到解決3個磁盤漢諾塔問題的詳細步驟。你可以通過更改moveDisk方法的第一個參數來改變磁盤的數量。

0