Tower of Hanoi 簡單易懂的寫法

2021-08-28 17:40:59 字數 974 閱讀 9511

hanoi塔問題的大意是將所有的盤子從最左邊(from)的柱子轉移到最右邊的柱子(to)上,可以借助中間的柱子(temp)。

而且移動過程中要滿足一下規則:

1:每次只能移動1個圓盤

2:任何時刻都不允許將較大的圓盤壓在較小的圓盤之上

hanio塔問題是一道經典的遞迴問題了,但是很多人第一次看都會一臉懵逼。因為他們看到的**是這樣的:

#includevoid hanoi(int n,char a,char b,char c)

}int main()

還沒領會到演算法的本質,就已經在abc的世界中找不到北了。。。

遞迴演算法最大的優點之一就是可讀性性、實現簡單,然而上面的**顯然不是這樣。問題就出在引數命名上,abc這樣的名字實在是太容易讓人混淆了~

其實hanoi的遞迴演算法很簡簡單單:

先把n −1

n-1n−

1個盤子從from放在temp上,

from上剩下的乙個盤子(也就是最底下的盤子)放到to上。

temp上的n−1

n-1n−

1個盤子放到to上。

只不過在放的過程中from、to、temp角色會發生變化,但放法都是一樣的。

#includevoid hanoi(int n,char from,char temp,char to)

}int main()

只要心中明確hanoi中各個位置引數的含義,就可以掌握hanoi的遞迴寫法啦。

遞迴解決 Tower of Hanoi 問題

原創 自己感覺寫的沒有原博主的那麼容易理解,於是就站在巨人的肩膀上摘蘋果,感謝部落格主。演算法 當只有乙個盤子的時候,只需要從將a塔上的乙個盤子移到c塔上。當a塔上有兩個盤子是,先將a塔上的1號盤子 編號從上到下 移動到b塔上,再將a塔上的2號盤子移動的c塔上,最後將b塔上的小盤子移動到c塔上。當a...

救救小易 網易python(簡單邏輯)

題目描述 有一片1000 1000的草地,小易初始站在 1,1 最左上角的位置 小易在每一秒會橫向或者縱向移動到相鄰的草地上吃草 小易不會走出邊界 大反派超超想去捕捉可愛的小易,他手裡有n個陷阱。第i個陷阱被安置在橫座標為xi 縱座標為yi 的位置上,小易一旦走入乙個陷阱,將會被超超捕捉。你為了去解...

GDB 簡單易上手的新人教程

gdb,又稱gnu偵錯程式,是用來幫助除錯我們程式的工具。gdb可以幹以下幾件事 1.給程式設定 特定條件下的 斷點 2.當程式停在斷點處時,我們檢視所有變數 暫存器的值 3.當程式停在斷點處時,我們除了能檢視所有變數 暫存器的值以外,還能在不改變源 的情況下改變這些值 這個確實屌 在我們學習使用g...