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

看板C_and_CPP作者 ( 強運逃敗 兩次 !)時間14年前 (2010/08/06 22:09), 編輯推噓5(501)
留言6則, 5人參與, 最新討論串2/4 (看更多)
※ 引述《Eureka7 (ξEureka seveN ξ)》之銘言: : 先說這是一份作業 : 但我實在思考良久,遇到瓶頸了,不知道該怎麼克服,因此上來求教 : 題目是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 這個題目和河內塔有幾項不同: a) 要將 1 號柱子上的盤子,移到 2 號 (而非 3 號) b) 無法直接在 1 <-> 3 之間移動,只能採行 1 <-> 2 <-> 3 的模式 如果是要搬到 3 號柱子的話,這題顯然無解, 移動最大那塊盤子會需要做 1 -> 3 的運算,然而小盤子們都在 2 上 如果直接比照河內塔的解法,僅將所有 1 <-> 3 的運算都以 1 <-> 2 <-> 3 取代,又不能排除會出現上述的跳出(違規)運算 所以這題最後還是要回到「紙筆證明」 ------- 符號定義: - R1, R2, R3 表第 1, 2, 3 根柱子,圓盤原本都在 R1 上,目標是 R2 - D1, D2, D3 表第 1, 2, 3 塊盤子,其中數字越大就越大片 - SN 表示包含 D1, D2, ... ,DN 盤子的堆疊 - S(a, b) 表示包含 Da, Da+1, ..., Db 之堆疊 - R1: SN-1, DN 表示 R1 上有 SN-2, 其下壓著 DN (也就是 D1, D2, ... DN-2, DN) 運算定義: - MN (M 表示 Medial 內側, MN 代表 1->2, 3->2 兩種運算) 由 R1: SN,轉換成 R2: SN 的搬移過程。 - LN (L 表示 lateran 外側,LN 代表 2->1, 2->3 兩種運算) 由 R2: SN 轉換成 R1:SN (或 R3: SN) 的搬移過程 - 上述兩種運算中,R1, R2, R3 可能都還有比 DN 更大的盤子, 但因不會在運算過程中移動,因此不干涉 MN/LN,而忽略不記 因此原命題轉化為:對所有自然數 N,證明 MN 運算之可行性 ------- 證明過程: 1. 手算可知 M1, N1 均可行 2. 依序執行下列步驟,可為 Mk 之等效運算 a. Mk-1 b. Lk-1 (移到另一邊) c. 將 Dk 移到中間 d. Mk-1 (移回中間) 3. 依序執行下列步驟,可為 Lk 之等效運算 a. Lk-1 (移到另一邊) b. 將 Dk 移到旁邊 (目標位置) c. Mk-1 d. Lk-1 (Dk 上面) 4. 由 2, 3 可知,若 Lk-1, Mk-1 均可行,則 Lk, Mk 亦可行 5. 由 1, 4, 及數學歸納法可知,對任意自然數 N, LN, MN 均可行,即原命題成立 ------- 至於詳細怎麼搬,就自己照上面的演算法去展開吧 XD 把 L/M 寫成函數就解決囉,只是要判斷 Dk, Dk-1 在哪根柱子上,或該移到哪根柱子 -- 鬼壓床怎麼辦 騎上去啊 Blog: http://clifflu.blogspot.com/ Since March, 2007 Photo Galelry: http://www.picasaweb.com/clifflu 沒有了 T_T -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.190

08/06 22:16, , 1F
推!
08/06 22:16, 1F

08/06 22:16, , 2F
08/06 22:16, 2F

08/06 22:28, , 3F
I must give you... yes!
08/06 22:28, 3F

08/06 22:36, , 4F
Joel說他聽過最有價值的一堂課就是...
08/06 22:36, 4F

08/06 22:37, , 5F
他聽完那堂課 發現他真的不適合讀博班...
08/06 22:37, 5F

08/08 00:52, , 6F
太強了Orz
08/08 00:52, 6F
文章代碼(AID): #1CN1U7PR (C_and_CPP)
文章代碼(AID): #1CN1U7PR (C_and_CPP)