**
首先是廣度優先搜尋演算法
初始化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。先想想你自己剛剛是怎麼找到這...