一、廣度優先算法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,標記該節點已被訪問