路徑尋找問題(八數碼問題)

2022-06-21 15:06:09 字數 499 閱讀 3999

之前的圖都是顯式的,路徑尋找還可以用於隱式圖。

隱式圖的乙個結點往往表現為乙個狀態,路徑尋找就是尋找從乙個狀態走到另乙個狀態的路徑。

八數碼問題:

3*3的矩陣中,8個格仔中有數字,1個格仔是空的,只允許空格子的相鄰格仔中的數字移動到空格子中這一種行為,給定初始狀態和最終狀態,求最小移動次數。

問題分析:

數字在格仔中的一種擺法是乙個狀態,所有的狀態組成乙個狀態空間,初始狀態是起點,最終狀態是終點,問題就轉換成了 找從起點到終點的最短路問題。

最短路用bfs。(邊界是找到最終狀態,分支是當前狀態能夠轉換成的狀態,查重是記錄搜尋過得狀態不再搜尋,利用狀態壓縮使得狀態容易表示)

搜尋過得結點不用再搜尋了,所以,每次列舉乙個狀態,都要檢查是否重複了,這就要把「走過的結點」儲存起來,然後查重。如何查重呢,每次都找一遍,遍歷所有狀態,比較9個數的順序是否一樣?太低效,要搜尋的狀態一共有9!=362879個,可以把012345678~876543210對映成0~362879,一一對應。

八數碼問題

八數碼問題 一.八數碼問題 八數碼問題也稱為九宮問題。在3 3的棋盤,擺有八個棋子,每個棋子上標有1至8的某一數字,不同棋子上標的數字不相同。棋盤上還有乙個空格,與空格相鄰的棋子可以移到空格中。要求解決的問題是 給出乙個初始狀態和乙個目標狀態,找出一種從初始轉變成目標狀態的移動棋子步數最少的移動步驟...

八數碼問題

2 6 4 1 3 7 0 5 8 8 1 5 7 3 6 4 0 2 樣例輸出 還有就是重判的問題,如何重判呢?第一種方法 把排列變成整數,然後只開乙個一維陣列,也就是說設計一套排列的編碼和解碼函式,把0 8的全排列和0 362879的整數意義一一對應起來。時間效率高,但編碼解碼法適用範圍並不大,...

八數碼問題

八數碼問題 題意 編號為1 8的8個正方形滑塊被擺成3行3列 有乙個格仔留空 如下圖所示 每次可以把與空格相鄰的滑塊 有公共邊才算相鄰 移到空格中,而他原來的位置 就成為了新的空格。如果無法到達目標局面,則輸出 1。2 6 4 13 75 8 移到後 8 1 5 73 642 樣例輸入 2 6 4 ...