演算法分析 Hanoi塔問題

2021-08-11 09:46:44 字數 748 閱讀 6504

上圖為 3 階 hanoi 塔

假設有三個命名為 a b c 的塔座 ,在塔座a上插有n個直徑大小不相同,由小到大編號為1 ,2 ,3 ,··· ,n的圓盤,要求將a座上的圓盤移至塔座c

並按同樣的順序疊排

圓盤移動必須遵守下列規則:

1:每次只能移動乙個圓盤 2:圓盤可以插在任意乙個塔座上 3:任何時刻都不能將乙個較大的圓盤放在乙個較小的圓盤上

舉個例子,若是3階hanoi 塔,則需要七步。   1—c,2—b,1—b,3—c,1—a,2—c,1—c。

那若為n階hanoi 塔,我們也可以將其看為2階,即n和n-1:將n-1移至b,將n移至c,再將n-1移至c。

再將n-1看為2階,即n-1和n-2。   ..........

以此類推直到1階。

以上步驟反著加,即為n階的所需步數,可看為遞迴函式。

以下為**

#include

void hanoi(int i , char a , char b , char c);

void move(int i , char x , char y);

int main()

void hanoi(int i , char a , char b , char c)

else

}void move(int i , char x , char y)

hanoi塔問題分析

這個問題起源於乙個類似傳說故事,在hanoi這個地方有乙個寺廟,這裡有3根柱子和64個大小不同的金碟子。每個碟子有乙個孔可以穿過。所有的碟子都放在第乙個柱子上,而且按照從上到下碟子的大小依次增大的順序擺設。如下圖 現在,假定寺廟裡的僧侶要移動這些碟子,將它們從最左邊移動到最右邊的柱子上。不過移動的規...

遞迴實現hanoi塔問題演算法

三個塔座,x y z x上有n個直徑大小各不相同從大到小依次編號為n的圓盤,將x塔上的圓盤移到z塔,要求 每次只能移動乙個圓盤 任何時候不能將較大的圓盤壓在較小的圓盤之上 演算法分析 如果x塔上只有乙個圓盤,則直接移到z軸上即可 如果x塔上圓盤個數 1,先將x塔上的n 1個盤借助z塔依次挪到y塔上,...

遞迴 Hanoi塔問題

題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...