1. 程式人生 > >漢諾塔遊戲簡單玩法

漢諾塔遊戲簡單玩法

今天學習遞迴的時候,書上以一款名叫<漢諾塔>的解謎遊戲為例。雖然開始被那演算法搞蒙了,不過我倒是把這遊戲的玩法給解出來了,這裡分享一下.

遊戲簡介:

遊戲裡有三根金剛石柱子,左邊的子上從下往上按照大小順序摞著N片黃金圓盤。玩家需要做的是把圓盤從下面開始按從大順序重新擺放在右邊的柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

首先我們來移動最簡單的三個圓盤:


1C代表最小號的盤子(1號盤子)第一步放在C位置,然後2號盤子放在B位置........上面這個步驟走完後,三個盤子就被按照大小順序放在了C位置.

想象一下,如果有4個盤子呢?看下圖。


因為第四個盤子是目前最大的盤子,在移動的時候按照規則必須放在最下方,所以A位置上只能有4號盤,C位置上面不能有盤,那麼所有其他盤子必須按照順序放在B位置.同時可得出有N個盤子的話,移動最大的盤時也是這種情況.

那麼把三個盤從左邊移動到中間的解法是:

 

3個盤子移動到中間後,就可以把第四個盤子移動到右邊瞭如果左邊是5個盤子的話,其中4個盤子必須在中間,移動的方法就不能和只有4個盤子一樣,所以1號盤子第一步不能走B,那麼只能走C.

那麼可否做一個猜想:

要讓奇數個盤子從左邊全部移動到右邊,那麼1號盤子第一步要移動到右邊(C位置),

要讓偶數個盤子從左邊全部移動到右邊,那麼1號盤子第一步

要移動到中間(B位置).

現在我給出所有移動三個盤子的情況:






這裡得出結論:三個盤子在任何位置情況下都可以移動到其他位置.,那麼我們就可以把三個盤子當做一個盤子來看待。

舉例移動5個盤子( 這裡隨便下載的手機遊戲,用輪子代替)

首先我們把上面3個看成一個盤子(1號),倒數第二個為2號,最後一個為3號。位置分別為ABC。

第1,2步:把最上層三個盤子(1號)按照上面給出的公式移動到C位置,2號移動到B位置。



第3,4步:1號移動到B位置(此時2號上面),3號移動到C位置



第5,6,7步:1號(這裡1號是最小的三個盤子)移動到A位置,2號移動到C位置(此時3號上面),1號再移動到C位置。



上面的7步走完後就OK了!

玩更多層的話,把多個盤子當做一個來看待,問題就變明朗了,但是走的步數會增加很多。

今天過了8層就有點頭暈了,好幾百步吧==!