luogu P1379 八數碼難題 狀壓DP

2022-03-10 00:35:10 字數 619 閱讀 6679

題目描述

在3×3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是:給出一種初始布局(初始狀態)和目標布局(為了使題目簡單,設目標狀態為123804765),找到一種最少步驟的移動方法,實現從初始布局到目標布局的轉變。

輸入初始狀態,一行九個數字,空格用0表示

輸出格式

只有一行,該行只有乙個數字,表示從初始狀態到目標狀態需要的最少移動次數(測試資料中無特殊無法到達目標狀態資料)

個人感覺,這題可以把9個位置,放在乙個數里,也就是9位數,處理倒是方便一點

往多了算一下o(9*(4^9)),可以接受

#include#include#include#include#include#includeusing namespace std;

const int dx=,dy=;

queueq;

mapm;

int n;

signed main()

for(int i=0;i<4;i++)

swap(c[nx][ny],c[f][g]);

} }cout<}

搜尋例題 八數碼難題 luoguP1379

同時把開始和結束狀態放入佇列搜尋,用map去重和記錄步數答案 include include include include include include includeusing namespace std typedef long long ll inline int read while c...

C P1379 八數碼難題

題目 p1379 八數碼難題 經典演算法教材題目,然後我決定用 hash bfs 搞一下,解釋 附上 include include using namespace std string strat,end 123804765 que 1000000 strat輸入和取佇列頭,end終點,que佇列...

洛谷 1379 八數碼難題

題目 八數碼難題 思路 bfs hash判重。注意 1 hash的鍊錶不能寫錯。2 由於用的是一位陣列,所以移動時要判斷左右邊界。比如當前的空位在5處,就不能向右移 1。0 1 2 3 4 5 6 7 8 include include include include include include...