[問題] 不是普通的8-puzzle問題...

看板C_and_CPP作者 (阿電)時間9年前 (2016/04/18 23:57), 9年前編輯推噓3(307)
留言10則, 5人參與, 最新討論串1/1
各位板友好,初次發文,請多指教 如有疏忽之處,還請提點 誠如標題所述,本人想要解一個題目,經過各種關鍵字找尋後,感覺跟8-puzzle很像 不過,題目不只是單純的「移動方塊成為指定排列模式」而已 例如: 0 5 8 7 4 3 2 6 1 這是一個puzzle(用0代表空格),我需要把1移動到左上角就好了 (其他順序啥的不考慮) 然而,所要求移動的方式必須是「總成本」(Cost)最小的那個方式 例如 <-- 5 0 8 7 4 3 2 6 1 這個狀態下,與剛剛的初始狀態比起來,移動了5,所以成本就是5 ============================================== 本人的想法目前偏向BFS或DFS(都是遞迴) BFS→一直往左上的方向,每個方向都移動一次,走的時候慢慢加cost DFS→一直往左上的方向,每次要移動時只選最小的數字 這樣一來,因為都是一直往左上,自然就把防止逆向的功能整併了 可是不知道要用哪個方式才是正確的... (剛剛手算DFS,感覺不像很快就能算出正確答案...) 希望各位板友能提點一下這個題目,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.13.149 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1460995062.A.D2E.html

04/19 00:03, , 1F
好A*不用嗎
04/19 00:03, 1F
這題並不是最短路徑... ※ 編輯: jh961202 (140.135.74.20), 04/19/2016 00:55:43

04/19 01:25, , 2F
所要求移動的方式必須是「總成本」最小的那個方式
04/19 01:25, 2F

04/19 01:25, , 3F
你確定這不是最短路徑
04/19 01:25, 3F

04/19 01:40, , 4F
A*最簡單就 BFS 用priority queue而已啊
04/19 01:40, 4F

04/19 01:41, , 5F
你把"距離"改成你的"成本"就好了
04/19 01:41, 5F

04/19 01:42, , 6F
而且8-puzzle其實很小, 窮舉都可以
04/19 01:42, 6F

04/19 02:43, , 7F
做法跟上面大大一樣~ 把距離改成本就好了
04/19 02:43, 7F

04/19 06:27, , 8F
最短路徑這東西本質上就是由 A 到 B 的最短成本
04/19 06:27, 8F

04/19 06:27, , 9F
你這個問題也是由 A (起始) 到 B (1 在左上) 的最短成本
04/19 06:27, 9F

04/19 10:13, , 10F
BFS標準題 也才8格 不會TL
04/19 10:13, 10F
文章代碼(AID): #1N5GFsqk (C_and_CPP)