隊列應用——廣度優(yōu)先搜索.doc

隊列應用——廣度優(yōu)先搜索.doc

ID:50755266

大小:2.02 MB

頁數(shù):16頁

時間:2020-03-14

隊列應用——廣度優(yōu)先搜索.doc_第1頁
隊列應用——廣度優(yōu)先搜索.doc_第2頁
隊列應用——廣度優(yōu)先搜索.doc_第3頁
隊列應用——廣度優(yōu)先搜索.doc_第4頁
隊列應用——廣度優(yōu)先搜索.doc_第5頁
資源描述:

《隊列應用——廣度優(yōu)先搜索.doc》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。

1、隊列應用——廣度優(yōu)先搜索如圖:求出從節(jié)點1到節(jié)點8的最短路徑的長度(1到8最少的邊數(shù))。使用計算機求解的問題中,有許多問題是無法用數(shù)學公式進行計算推導找出答案的。就像這一題,需窮舉從節(jié)點1到節(jié)點8的所有路徑才能找到答案。窮舉是最樸素的搜索。窮舉所有路徑,面對大規(guī)模數(shù)據(jù)將是很可怕的,采用廣度優(yōu)先搜索法(BFS),就不必窮舉所有路徑,大大提高效率。用廣度優(yōu)先搜索法解答此題的過程:1.先搜索所有節(jié)點中距節(jié)點1最近的點——節(jié)點1(距離為0);2.再搜索與節(jié)點1距離為1的節(jié)點——2,3,5;3.然后搜索與節(jié)點

2、1距離為2的節(jié)點——與節(jié)點2,3,5中某點距離為1且尚未搜索過的節(jié)點——6,7,4,9;4.再搜索距節(jié)點1距離為3的節(jié)點——與節(jié)點6,7,4,9中的某點距離為1且尚未搜索過的節(jié)點——8;由以上過程可以確定1到8的最短距離為3(可以用反證法證明此結論的正確性)。整個過程如下圖:可以看出搜索的過程是“一層一層”的,從第一層開始,每層的節(jié)點都會被“用”來產生下一層的節(jié)點,當這一層的節(jié)點被“用完”后,才用它們所產生的下一層節(jié)點來產生新的節(jié)點層,而同一層的節(jié)點可以按任意順序“使用”,一般采用的原則是先生成的結

3、點先“使用”。對“使用”一詞,更恰當?shù)恼f法是“擴展”。廣度優(yōu)先搜索算法中,為了便于進行搜索,要設置一個表存儲所有的節(jié)點,為了滿足先生成的節(jié)點層(節(jié)點)先擴展的原則,存儲節(jié)點的表一般設計成隊列的數(shù)據(jù)結構。搜索過程中不斷地從隊列頭取出節(jié)點進行擴展。對生成的新節(jié)點,要檢查它是否已在隊列中存在,還要檢查它是否目標節(jié)點。如果新節(jié)點是目標節(jié)點,則搜索成功,程序結束;若新節(jié)點不是目標節(jié)點,并且未曾在隊列中出現(xiàn)過,則將它加入到隊列尾,否則將它丟棄,再從隊列頭取出節(jié)點進行擴展......。最終可能產生兩種結果:找到目

4、標節(jié)點,或擴展完所有節(jié)點有找到目標節(jié)點。題一:求兩點間的最短路徑長度在一由n(1<=n<=100)個節(jié)點,m(1<=m<=n*(n-1)/2)條邊構成的圖中,求出節(jié)點s到t的最短路徑長度。輸入(input.txt):第一行n,m,s,t;接下來m行,每行兩個整數(shù)i,j(1<=i,j<=n),表示i,j間有一條邊。輸出(output.txt):S到t的最短路徑的長度(從s到t經過的最少邊數(shù)),若從s無法到達t,輸出-1.分析:布爾數(shù)組bVisited[i]非零表示節(jié)點i已在隊列中,為零表示尚未入隊;布

5、爾數(shù)組bAdj[i][j]非零表示節(jié)點i與節(jié)點j之間有一條邊,否則無邊;隊列q[],隊首iH,隊尾iT;step[i]表示起點到節(jié)點i的最短距離。(數(shù)據(jù)見習題)源代碼:#includeusingnamespacestd;ifstreamfin("input.txt");ofstreamfout("output.txt");constintLQ=110,N=110;intbNoAns,bVisited[N]={0},bAdj[N][N]={0};intn,m,s,t,iH,iT,q[

6、LQ],step[N]={0};intInputDataAndInitialize(void);intBFS(void);intOutputAnswer(void);intmain(intargc,char*argv[]){InputDataAndInitialize();BFS();OutputAnswer();return0;}intInputDataAndInitialize(void){fin>>n>>m>>s>>t;inti,j;for(;m--;){fin>>i>>j;bAdj[i][j

7、]=bAdj[j][i]=1;}for(i=1;i<=n;++i)bAdj[i][i]=0;iH=0;iT=1;q[0]=s;bVisited[s]=1;bNoAns=1;return1;}intBFS(void){if(q[0]==t){bNoAns=0;return1;}inti,j;while(iH

8、ted[j]=1;if(j==t){bNoAns=0;return1;}}}}return1;}intOutputAnswer(void){if(bNoAns){fout<<"-1";return1;}fout<

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現(xiàn)內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。