八數碼問題

2021-09-02 11:33:07 字數 749 閱讀 1050

八方塊移動遊戲要求從乙個含 8 個數字(用 1-8 表示)的方塊以及乙個空格方塊的 3 × 3 矩陣的起始狀態開始,不斷移動該空格方塊以使其和相鄰的方塊互換,直至達到所定義的目標。空格方塊在中間位置時有上、下、左、右 4 個方向可移動,在四個角落上有 2個方向可移動,在其他位置上有 3 個方向可移動。例如,假設乙個 3× 3 矩陣的初始狀態為:

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

input 程式需讀入初始狀態和目標狀態,這兩個狀態都由 9 個數字組成( 0 表示空格, 1-8 表示 8個數字方塊),每行 3 個數字,數字之間用空格隔開。

output 如果輸入資料有解,輸出乙個表示最短路徑的非負的整數;如果輸入資料無解,輸出 -1 。

includeincludeincludeusing namespace std;

struct node}}

return false;

}bool operator == (const node &x) const}}

return true;

}};

八數碼問題

八數碼問題 一.八數碼問題 八數碼問題也稱為九宮問題。在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 ...