看板 C_and_CPP 關於我們 聯絡資訊
各位板友好,初次發文,請多指教 如有疏忽之處,還請提點 誠如標題所述,本人想要解一個題目,經過各種關鍵字找尋後,感覺跟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
IKAFIRE: 好A*不用嗎 04/19 00:03
這題並不是最短路徑... ※ 編輯: jh961202 (140.135.74.20), 04/19/2016 00:55:43
IKAFIRE: 所要求移動的方式必須是「總成本」最小的那個方式 04/19 01:25
IKAFIRE: 你確定這不是最短路徑 04/19 01:25
bibo9901: A*最簡單就 BFS 用priority queue而已啊 04/19 01:40
bibo9901: 你把"距離"改成你的"成本"就好了 04/19 01:41
bibo9901: 而且8-puzzle其實很小, 窮舉都可以 04/19 01:42
Sylveon: 做法跟上面大大一樣~ 把距離改成本就好了 04/19 02:43
LPH66: 最短路徑這東西本質上就是由 A 到 B 的最短成本 04/19 06:27
LPH66: 你這個問題也是由 A (起始) 到 B (1 在左上) 的最短成本 04/19 06:27
Yshuan: BFS標準題 也才8格 不會TL 04/19 10:13