2005
題目描述:
八方塊移動遊戲要求從乙個含8 個數字(用1-8 表示)的方塊以及乙個空格方塊(用0 表示)的3x3 矩陣的起始狀態開始,不斷移動該空格方塊以使其和相鄰的方塊互換,直至達到所定義的目標狀態。空格方塊在中間位置時有上、下、左、右4 個方向可移動,在四個角落上有2 個方向可移動,在其他位置上有3 個方向可移動。例如,假設乙個3x3 矩陣的初始狀態為:
8 0 3
2 1 4
7 6 5
目標狀態為:
1 2 3
8 0 4
7 6 5
則乙個合法的移動路徑為:
8 0 3 8 1 3 8 1 3 0 1 3 1 0 3 1 2 3
2 1 4 => 2 0 4 => 0 2 4 => 8 2 4 => 8 2 4 => 8 0 4
7 6 5 7 6 5 7 6 5 7 6 5 7 6 5 7 6 5
另外,在所有可能的從初始狀態到目標狀態的移動路徑中,步數最少的路徑被稱為最短路徑;在上面的例子中,最短路徑為5 。如果不存在從初試狀態到目標狀態的任何路徑,則稱該組狀態無解。
請設計有效的(細節請見評分規則)演算法找到從八方塊的某初試狀態到某目標狀態的所有可能路徑中的最短路徑,並用c/c++ 實現。
輸入資料:
程式需讀入已被命名為start.txt 的初始狀態和已被命名為goal.txt 的目標狀態,這兩個檔案都由9 個數字組成(0 表示空格,1-8 表示8 個數字方塊),每行3 個數字,數字之間用空格隔開。
輸出資料:
如果輸入資料有解,輸出乙個表示最短路徑的非負的整數;如果輸入資料無解,輸出-1 。
自測用例:
如果輸入為:start.txt 和goal.txt ,則產生的輸出應為: 5
又例,如果用
7 8 4
3 5 6
1 0 2
替換start.txt 中的內容,則產生的輸出應為: 21
這道題的解法應該是很典型的a*演算法,記得在人工智慧那門課上聽過。但是還是不會寫,永遠想不明白a*演算法裡面「評價函式」是怎麼構建出來的。所以只好用非常簡單的暴力解法。
暴力解法,廣度優先搜尋演算法。用乙個整數代表9宮格的狀態,整數的每4位代表9宮格裡面的8個方格(確定了8個方格,第九個方格就固定了),確定0的位置,然後進行替換的廣度優先搜尋。
由於9宮格的狀態最多有9!種,因此搜尋的長度最大為362880=9!這也是為什麼宣告乙個這麼長的陣列路徑的原因。
**如下(也很暴力,還是有很多可以優化的,寫的太暴力了):
2023年工作總結
2005年工作總結 judy shen 2005 年即將過去,雖然我 2005 年在longtop的工作時間不長,只有不到 3個月的時間,但是這將近三個月的時間裡,本人認真的做好了本職工作,認真 積極 按質按量的完成領導安排的工作。一 工作總結 總體來說,2005 年我主要完成了以下幾方面的工作 l...
2023年度個人總結
在過去的 2005 年,本人取得了以下幾點進步 1.專案管理能力有了較高地提高 成功通過 pmp認證考試應該說是本年度在工作方面取得的最大收穫,算得上職業生涯上的乙個不大不小的里程碑吧。帶領專案團隊成功實施了 2個專案,增強了專案管理能力,對專案管理流程和操作有了實際經驗。並基本掌握了 projec...
2023年SCU校賽總結
這是某個我不認識的人在討論裡面催我做總結的,最近太忙啦,畫個圈圈詛咒你,哼 第二次打川大校賽呀,去年就被江安校區那條大江震撼了,然後今年帶學弟學妹他們去看他們反而看了一會就抄小路走了,然後找到了比賽地點,然後樓裡面一堆電科大佬的說,我還是沒有去找秦隊長面基,差距太大了啊,然後本來打算吃飯的,然後學弟...