洛谷 1379 八數碼難題

2021-08-14 05:48:40 字數 817 閱讀 6238

題目:八數碼難題

思路:bfs+hash判重。

注意:1、hash的鍊錶不能寫錯。

2、由於用的是一位陣列,所以移動時要判斷左右邊界。比如當前的空位在5處,就不能向右移+1。

0 1 2

3 4 5

6 7 8

**:

#include#include#include #include #include #include #include #include #include #include #include using namespace std;

#define n 8

#define max_state 362880

#define mod 1000003

int head[mod+5],nxt[mod+5],val[mod+5],num=0;

struct state

} bool find()

return false;

} void add()

bool judge()

};bool agree(int x,int mv)

const int m[5]= ;

state que[max_state+5];

int bfs(state in)

if(x.judge()) return x.step;

}} }

return -1;

}int main()

} x.step=0;

printf("%d",bfs(x));

return 0;

}

洛谷 1379 八數碼難題

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

洛谷 P1379 八數碼難題

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

洛谷 P1379 八數碼難題

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