看板 C_and_CPP 關於我們 聯絡資訊
先說這是一份作業 但我實在思考良久,遇到瓶頸了,不知道該怎麼克服,因此上來求教 題目是hanoi tower的小變化題型 設有1,2,3 三根柱子 目的是把1號柱的盤子全部移動到2號柱上 但有別於一般hanoi,稍微限制了盤子移動的路徑 限制如下: 1 -> 2 OK 2 -> 3 OK 3 -> 2 OK 2 -> 1 OK 但是 1 -> 3 NO 3 -> 1 NO 簡單的講就是一次只能移動到相鄰柱子(但1,3不相鄰),不能跳號搬動 目前我的想法是設有n個盤子 先將n-1由1移動到2,再從2移動到3 然後將底由1 -> 2 最後將n-1從三搬回二 但程式寫出來完全不是那回事的感覺 也找不出癥結點...... 不知道哪個地方或是程式應該怎麼寫...... 不好意思粗淺問題佔了版面 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.83.83 ※ 編輯: Eureka7 來自: 220.136.83.83 (08/06 21:25)
x000032001:經典遞迴題 google有很多很多的資訊 08/06 21:27
Eureka7:x大不好意思,其實我也有google了,但原諒我可能太蠢,實 08/06 21:29
Eureka7:在找不到...... 08/06 21:29
clifflu:這個真的和傳統的河內塔不一樣喔 XD 正在思考 08/06 21:34
※ 編輯: Eureka7 來自: 220.136.83.83 (08/06 21:35)
yauhh:如果有一個動作要從1->3,就要拆成1->2,2->3 08/06 21:41
x000032001:XD 拍謝 08/06 21:49
walker2009:感覺只要改遞迴最後的動作就好了? 08/06 21:56
※ 編輯: Eureka7 來自: 220.136.83.83 (08/06 21:59)
bleed1979:我已經寫完了,共4個if而已。需要程式碼的話站內信。 08/06 22:02
xam:.......... 為甚麼有這麼多 if 08/06 22:05
bleed1979:我把else if也算if,if加上3個else if最後else是error 08/06 22:06
yauhh:可是老實說,拆成1->2,2->3蠻無趣,可以問問有沒有更聰明方法 08/06 22:21
bleed1979:我的寫法只不過是implement題意。 08/06 22:27
bleed1979:if v1圈小於v2圈且剛才不是從v2圈搬過來,v1圈->v2圈。 08/06 22:28
bleed1979:else if類推,共4種搬法。 08/06 22:28
bleed1979:然後遞迴到v2圈的指標指向0即可。 08/06 22:29