八數碼 bfs,雜湊

2021-06-21 14:46:56 字數 586 閱讀 8893

很經典的搜尋,bfs部分沒什麼好講的,不是很難,值得注意的是如何判定走的路徑是否重複,本題採用的是雜湊來判重

#include#include#includetypedef int state[9];

const int maxn=1000003;

int head[maxn],next[maxn];//head陣列表示每個hash值的頭指標,next陣列表示每個hash值的尾指標

state st[maxn],goal;

int dist[maxn];

int dx[4]=;

int dy[4]=;

void init_lookup_table()//初始化查詢表

int hash(state& s)//hash函式

int try_to_insert(int s)

next[s]=head[h];

head[h]=s;//插入到鍊錶中

return 1;

}int bfs()

}front++;

}return 0;

}int main()

codevs1225 八數碼難題 bfs 雜湊

題目描述 description yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布...

八數碼題解(bfs

八數碼分析 本題是求最少交換次數,故先想到bfs,而本題的難點在於狀態和步數的儲存。以及狀態的轉移。如何記錄下x和乙個數交換後的狀態?如何記錄步數?主要思想 乙個巧妙的思想可以解決此類問題,狀態可以用string型別來記錄,求在3 3矩陣中的橫縱座標無非就是將其在string型別中的位序 假設為k ...

雙向BFS 八數碼問題

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