[問題] 請教一個Hanoi的問題

看板C_and_CPP作者 (ξEureka seveN ξ)時間14年前 (2010/08/06 21:24), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串1/4 (看更多)
先說這是一份作業 但我實在思考良久,遇到瓶頸了,不知道該怎麼克服,因此上來求教 題目是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)

08/06 21:27, , 1F
經典遞迴題 google有很多很多的資訊
08/06 21:27, 1F

08/06 21:29, , 2F
x大不好意思,其實我也有google了,但原諒我可能太蠢,實
08/06 21:29, 2F

08/06 21:29, , 3F
在找不到......
08/06 21:29, 3F

08/06 21:34, , 4F
這個真的和傳統的河內塔不一樣喔 XD 正在思考
08/06 21:34, 4F
※ 編輯: Eureka7 來自: 220.136.83.83 (08/06 21:35)

08/06 21:41, , 5F
如果有一個動作要從1->3,就要拆成1->2,2->3
08/06 21:41, 5F

08/06 21:49, , 6F
XD 拍謝
08/06 21:49, 6F

08/06 21:56, , 7F
感覺只要改遞迴最後的動作就好了?
08/06 21:56, 7F
※ 編輯: Eureka7 來自: 220.136.83.83 (08/06 21:59)

08/06 22:02, , 8F
我已經寫完了,共4個if而已。需要程式碼的話站內信。
08/06 22:02, 8F

08/06 22:05, , 9F
.......... 為甚麼有這麼多 if
08/06 22:05, 9F

08/06 22:06, , 10F
我把else if也算if,if加上3個else if最後else是error
08/06 22:06, 10F

08/06 22:21, , 11F
可是老實說,拆成1->2,2->3蠻無趣,可以問問有沒有更聰明方法
08/06 22:21, 11F

08/06 22:27, , 12F
我的寫法只不過是implement題意。
08/06 22:27, 12F

08/06 22:28, , 13F
if v1圈小於v2圈且剛才不是從v2圈搬過來,v1圈->v2圈。
08/06 22:28, 13F

08/06 22:28, , 14F
else if類推,共4種搬法。
08/06 22:28, 14F

08/06 22:29, , 15F
然後遞迴到v2圈的指標指向0即可。
08/06 22:29, 15F
文章代碼(AID): #1CN0qJ_0 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CN0qJ_0 (C_and_CPP)