雙向寬度搜尋

2022-05-05 16:42:07 字數 970 閱讀 9384

從正反兩個方向進行寬度優先搜搜,可以大大減少搜尋量,提高搜尋速度。

從初始狀態和目標狀態兩個方向同時進行擴充套件,如果兩顆解答樹在某個節點第一次發生重合,即可終止此搜尋過程,則該節點所連線的兩條路徑所拼成的路徑就是最優解。

通常有兩種搜尋方式

1.兩個方向交替擴充套件

2.選擇節點個數較少的那個方向先擴充套件

方法2只需要略加修改控制結構,每次while迴圈時只擴充套件正反兩個方向中節點數目較少的那乙個,可以使兩邊的發展速度保持一定的平衡,從而減少總擴充套件節點的個數,加快搜尋速度。

int head[2],tail[2

],ans;

struct s q[2][maxn];//

佇列int v[2][maxn][maxn];//

記錄訪問節點的陣列

int dis[2][maxn][maxn];//

尋找最短路徑時記錄陣列

int dx[10],dy[10];//

擴充套件方向

int expand(int k)//

對k佇列進行擴充套件}}

return0;

}void

bfs()

q[0][1].x=startx; q[0][1].y=starty;

q[1][1].x=endx; q[1][1].y=endy;

v[0][q[0][1].x][q[0][1].y]=1

; v[

1][q[1][1].x][q[1][1].y]=1

; tail[

0]=head[0]=tail[1]=head[1]=1

;

while(head[0]<=tail[0]&&head[1]<=tail[1

])

else

//方法二,擇優擴充套件

}

return

;}

這種包裝的暴力也就我這種不會正解蒟蒻用吧

寬度優先搜尋

include using namespace std const int n 700 const int inf 0x3f3f3f3f int dir 10 int n,a,b,ans 1000000 flag 0 int floor n struct node int check node tm...

寬度優先搜尋

寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...

寬度優先搜尋

寬度優先搜尋也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。const int inf 100000000 使用pair表示狀態時,使用typedef會更加方便一些 typedef pair p char maze max n max m 1 表示迷宮的字串陣列 in...