我正在調試河內問題塔的一些解決方案,並總是發現一個混淆規則。我認爲有一個限制,說明「磁盤從一根杆的頂部滑到下一根杆上」。河內解決方案問題
我的問題是,如果第45行工作,這意味着「緩衝」杆在當前杆旁邊,「目標」杆不應該在當前杆旁邊。這意味着第46行是不正確的,因爲我們移動到一個不與當前棒相鄰的位置。
但它似乎是唯一的解決方案?如果有人能澄清這種混亂,那會很好。
這裏是我調試代碼:
public static void main(String[] args) {
int n = 5;
Tower[] towers = new Tower[n];
for (int i = 0; i < 3; i++) towers[i] = new Tower(i);
for (int i = n - 1; i >= 0; i--) towers[0].add(i);
towers[0].moveDisks(n, towers[2], towers[1]);
}
public class Tower {
private Stack <Integer> disks;
private int index;
public Tower(int i) {
disks = new Stack <Integer>();
index = i;
}
public int index() {
return index;
}
public void add(int d) {
if (!disks.isEmpty() && disks.peek() <= d) {
System.out.println(「Error placing disk」 + d);
} else {
disks.push(d);
}
}
public void moveTopTo(Tower t) {
int top = disks.pop();
t.add(top);
System.out.println(「Move disk」 + top + 「from」 + index() + 「to」 + t.index());
}
public void print() {
System.out.println(「Contents of Tower「 + index());
for (int i = disks.size() - 1; i >= 0; i--) {
System.out.println(「「 + disks.get(i));
}
}
public void moveDisks(int n, Tower destination, Tower buffer) {
if (n > 0) {
moveDisks(n - 1, buffer, destination);
moveTopTo(destination);
buffer.moveDisks(n - 1, destination, this);
}
}
}
由於提前, 林
歡迎任何疑問。 –
@SumeetSingh,查詢? –
@Jayesh,很好! :) –