TopSort 拓撲排序 中DFS和BFS的應用

2021-09-05 10:30:28 字數 986 閱讀 5595

深度優先搜尋:

下面圖中的數字顯示了深度優先搜尋頂點被訪問的順序。

為了實現深度優先搜尋,首先選擇乙個起始頂點並需要遵守三個規則:

(1) 如果可能,訪問乙個鄰接的未訪問頂點,標記它,並把它放入棧中。

(2) 當不能執行規則1時,如果棧不空,就從棧中彈出乙個頂點。

(3) 如果不能執行規則1和規則2,就完成了整個搜尋過程。

廣度優先搜尋:

在深度優先搜尋中,演算法表現得好像要盡快地遠離起始點似的。相反,在廣度優先搜尋中,演算法好像要盡可能地靠近起始點。它首先訪問起始頂點的所有鄰接點,然後再訪問較遠的區域。它是用佇列來實現的。

下面圖中的數字顯示了廣度優先搜尋頂點被訪問的順序。

實現廣度優先搜尋,也要遵守三個規則:

(1) 訪問下乙個未來訪問的鄰接點,這個頂點必須是當前頂點的鄰接點,標記它,並把它插入到佇列中。

(2) 如果因為已經沒有未訪問頂點而不能執行規則1時,那麼從佇列頭取乙個頂點,並使其成為當前頂點。

(3) 如果因為隊列為空而不能執行規則2,則搜尋結束。

1.深度優先搜尋dfs(遞迴呼叫棧實現)

void dfs(graph *g, int v)
2.廣度優先搜尋bfs(優先佇列實現)

void bfs(graph *g, int  start, queue*q)}}

下圖摘自嚴蔚敏的教材:

上面說的是dfs。

我們通常會在u對所有的v搜尋完後把vis[u]=0;表示未訪問,可能會在另一條路徑中訪問到u,對此,可以這樣理解在沒有環的情況下,訪問的複雜度算邊x->u的

下面說的是bfs。

拓撲排序 topsort

不知道topsort 排序有沒有專門的演算法,不過今天貼這個挺簡單的,也好理解 拓撲排序就是,給出一系列的需求關係,求乙個序列,這個序列完全滿足這裡面 的全部需求,直到結束 如 你想要認識 歐巴馬 必須要認識 f 和 d,你要認識 d 必須認識 b,可是你要認識b 又得靠 a 和 c,當然認識 f ...

拓撲排序 TOP Sort

bilibili aov網 在乙個表示工程的有向圖中,用定點表示活動,用弧表示活動之間的優先關係,成為頂點表示活動網。1.在拓撲排序中如果乙個頂點在另乙個定點之前可能是並列或者先後關係。2.若頂點a到頂點b之間有一條路徑,則在拓撲序列中頂點a一定在頂點b的前面。3.在拓撲序列中使得aov網中所有的前...

拓撲排序 dfs

運用dfs,對乙個有向無回圖 dag 進行拓撲排序。乙個圖的拓撲排序可看成所有頂點沿水平線排列而成的乙個序列,使得所有有向邊均從左指向右。topological sort g call dfs g to compute finishing times f v for each vertex v as...