標籤:fst png margin read pre oct 隊列 adt 訪問
廣度優先遍曆(breadth-first traverse,bfts),稱作廣度優先搜尋(breath first search)是連通圖的一種遍曆策略。之所以稱作廣度優先遍曆是因為他的思想是從一個頂點V0開始,輻射狀地優先遍曆其周圍較廣的地區。
演算法描述
給定圖G=(V,E)。V是節點集合,E是邊集合。 設定一個訪問標誌位vflag(i)表示節點i的訪問情況,若vflag(i)=0表示節點i未被訪問 vflag(i)=1表示節點i已經被訪問過。 l 初始化所有節點的vflag=0。 l 某個節點V0出發(該節點可以是任意的),並訪問此頂點。 l 從V0出發,訪問V0的各個未曾訪問的鄰接點(下標從小到大排列)W1,W2,…,Wk;然後,依次從W1,W2,…,Wk出發訪問各自未被訪問的鄰接點。 l 重複上步,直到全部頂點都被訪問為止。 |
For example,
fig1. 5節點無向圖
假設我們先從V3 節點開始,把V3裝進遍曆結果隊列和緩衝隊列。將V3訪問標誌位置1。取出緩衝隊列首位後並丟棄。這裡是V3節點。找出與V3節點相鄰的並未被訪問過的節點有。有V1和V5節點,按下標大小我們將V1和V5分別裝進緩衝隊列和遍曆隊列。自此。緩衝隊列是[1,5]。遍曆隊列是[3,1,5]。此時緩衝隊列沒有丟空,我們繼續重複之前的步驟。即取出並丟棄緩衝隊列隊首V1。找出與V1相鄰並未訪問過的節點,有V2,V4.. 此時緩衝隊列是[5,2,4],遍曆隊列是[3,1,5,2,4]。此時,已經完成遍曆。緩衝隊列還未被丟空,繼續重複上述步驟。即取出並丟棄緩衝隊列隊首V5,找出與V5相鄰未被訪問的節點,沒有。V3相鄰但是V3已被訪問。此時緩衝隊列是[2,4],遍曆隊列是[3,1,5,2,4]。類似丟V2,V4直至緩衝隊列丟空。實際為節省程式已耗用時間可將遍曆結束條件設為訪問標誌隊列全部非0。
BFT的java實現代碼:
1 %============================================ 2 % 檔案名稱: bfst 3 % 版本號碼: 1.0.0 4 % Isabelle<[email protected]> 5 % 單位: specter 6 % 修改時間: Sat Oct. 8 1:20:01 2017 7 % 建立時間: Sat Oct. 8 1:20:01 2017 8 %-------------------------------------------------------------------------- 9 % blog:http://www.cnblogs.com/isabellezhou10 % Copyright (Dist) 2017 Isabelle All rights reserved. 11 %============================================public class{}
無向圖廣度優先遍曆及其JAVA實現