1. 程式人生 > >圖解:有向環、拓撲排序與Kosaraju演算法

圖解:有向環、拓撲排序與Kosaraju演算法

![](https://user-gold-cdn.xitu.io/2020/7/15/17350526424166fe?w=900&h=349&f=png&s=473742) > 圖演算法第三篇 圖解:有向環、拓撲排序與`Kosaraju`演算法 首先來看一下今天的內容大綱,內容非常多,主要是對演算法思路與來源的講解,圖文並茂,希望對你有幫助~ ![](https://user-gold-cdn.xitu.io/2020/7/15/173504518e742b46?w=865&h=634&f=png&s=54918) ## 1.有向圖的概念和表示 ### 概念 有向圖與上一篇文章中的無向圖相對,邊是有方向的,每條邊所連線的兩個頂點都是一個**有序對**,它們的鄰接性都是單向的。 >一幅有方向的圖(或有向圖)是由一組頂點和一組有方向的邊組成的,每條有方向的邊都連線著一對有序的頂點。 其實在有向圖的定義這裡,我們沒有很多要說明的,因為大家會覺得這種定義都是很自然的,但是我們要始終記得**有方向**這件事! ### 資料表示 我們依然使用**鄰接表**儲存有向圖,其中`v-->w`表示為`頂點v`的鄰接連結串列中包含一個`頂點w`。注意因為方向性,這裡每條邊只出現一次! ![](https://user-gold-cdn.xitu.io/2020/7/14/1734b097bf4a7e63?w=1274&h=796&f=png&s=139007) 我們來看一下有向圖的資料結構如何實現,下面給出了一份`Digraph類`(Directed Graph) ``` package Graph.Digraph; import java.util.LinkedList; public class Digraph{ private final int V;//頂點數目 private int E;//邊的數目 private Li