雙向廣度優先搜尋演算法

2021-08-28 16:01:21 字數 1354 閱讀 2587

**

首先是廣度優先搜尋演算法

初始化visited陣列,將所有點的值設為false;//visited陣列用來儲存所有點的訪問情況

visited[start]=true;//start為起始點

queuesearch;//用來儲存待搜尋點的佇列

search.push(start);

while(!search.empty())

}

然後是雙向搜尋,基本思想是從結束狀態與開始狀態同時搜尋,搜到相同點時停止

if(start==finish)

return 0;

初始化visited陣列裡每個值為0; //這裡visited值為1則為向後搜尋過的值,為2則為向前搜尋過的值

初始化起始點start.step=true; //這裡step屬性為真則表示為某一搜尋步數中的最後乙個點,例如對於poj1915中第2步有八個點,只有第八個點的step為true,其餘為false

初始化目標點finish.step=true;

visited[start]=true;

visited[finish]=true;

queuefrontsearch;//記錄從前向後搜尋的佇列

queuebacksearch;//記錄從後向前搜尋的佇列

fstep=0;//記錄從前向後搜尋的步數

bstep=0;//記錄從後向前搜尋的步數

frontsearch.push(start);

backsearch.push(finish);

while(!frontsearch.empty() || !backsearch.empty())

}}while(!current.step);//同一步的點已經全部搜完,結束迴圈

fstep++;//增加從前向後搜尋的步數

current=frontsearch.front();

frontsearch.pop();

current.step=true;

frontsearch.push(current);//將當前步數最後乙個點的step屬性設為true;

}if(!backsearch.empty())

}}while(!current.step);//同一步的點已經全部搜完,結束迴圈

bstep++; //增加從後向前搜尋的步數

current=backsearch.front();

backsearch.pop();

current.step=true;

backsearch.push(current);//將當前步數最後乙個點的step屬性設為true;

}}

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...

廣度優先搜尋演算法

在深度優先搜尋中,深度越大的結點越先得到擴充套件。如果把它改為深度越小的結點越先得到擴充套件,就是廣度優先搜尋法。廣度優先搜尋演算法的基本思想 1 建立乙個空的狀態佇列ss 2 建立乙個空的狀態庫sb 3 把初始狀態s 0 存入佇列ss中 4 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...

廣度優先搜尋演算法

看了下廣度優先搜尋演算法得定義為從乙個頂點開始,找到最短路勁,歸結為一種連通圖得遍歷策略 如果我們要求v0到v6的一條最短路 假設走乙個節點按一步來算 注意 此處你可以選擇不看這段文字直接看圖3 1 我們明顯看出這條路徑就是v0 v2 v6,而不是v0 v3 v5 v6。先想想你自己剛剛是怎麼找到這...