圖解:有向環、拓撲排序與Kosaraju演算法
阿新 • • 發佈:2020-07-15
![](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