很經典的搜尋,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 ...