一、廣度優先算法BFS(Breadth First Search)
基本實作思想
(1)頂點v入隊列。
(2)當隊列非空時則繼續執行,否則算法結束。
(3)出隊列取得隊頭頂點v;
(4)查找頂點v的是以子節點,并依次進入隊列;
(5)轉到步驟(2)。
python僞代碼:
def BFS(root)
Q=[]
Q.append(root[0])
while len(Q)>0:
node=Q.pop(0)
print (node)
#将所有子節點入隊列
for i in node_child:
Q.append(node_child[i])
注:該算法很巧妙的利用了隊列的先進先出政策。
二、深度優先算法DFS(Depth First Search)
基本思想:
遞歸實作:
(1)通路頂點v,列印節點;
(2)周遊v的子節點w,while(w存在),遞歸執行該節點;
代碼:
/布爾型數組Visited[]初始化成false
void DFS(Vetex v)
{
Visited[v] = true;
for each w adjacent to v
if (!Visited[w])
DFS(w);
}
非遞歸實作:
(1)通路頂點v,頂點v入棧S,列印輸出頂點,visited[v]=1
(2)while(棧S非空)
x=棧S的頂元素(不出棧);
if(存在并找到未被通路的x的子結點w)
通路w,列印輸出,visited[w]=1;w進棧;
else
x出棧;
注:visited[x]=1,标記該節點已被通路