目录

一、有向图 157

1.1有向图的定义及相关术语 157

1.2有向图的实现 158

二、拓扑排序 159

2.1检测有向图中的环 160

2.1.1检测有向图中环API设计 160

2.1.2检测有向环实现 161

2.2基于深度优先顶点排序 162

2.2.1顶点排序API设计

2.2.2顶点排序实现的原理过程

2.2.3顶点排序代码的实现及测试 162、163、164

三、加权无向图 165

3.1加权无向图边的表示---加权的边实现 166

3.2加权无向图边的表示---无向图的实现 167

四、最小生成图 168

4.1最小生成树定义及相关约定 168

4.2最小生成树原理---切分定理 169

4.2.1树的性质

4.2.2切分定理

4.3贪心算法 170

4.4Prim算法 171

4.4.1Prim算法API设计

4.4.2Prim算法的实现原理 172  

4.4.3Prim算法的代码实现及测试173、174、175

4.5kruskal算法 176

4.5.1kruskal算法API设计 

4.5.2kruskal算法的实现原理 177

4.5.3kruskal算法代码实现及测试 178、179

五、加权有向图 180

5.1加权有向图边的表示 180

5.2加权有向图的实现 181

六、最短路径182

6.1最短路径定义及性质 182

6.2最短路径树API设计 182

6.3松弛技术 183

6.4Dijstra算法实现及测试 184、185、186


一、有向图 157

图的边是有方向的

1.1有向图的定义及相关术语 157

java判断无向图中有几个环 java 有向无环图_排序算法

 

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_02

1.2有向图的实现 158

 

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_03

二、拓扑排序 159

基于有向图实现拓扑排序。

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_04

2.1检测有向图中的环 160

检测有向图环的目的:

有向图中存在环,就没办法进行拓扑排序了

2.1.1检测有向图中环API设计 160

java判断无向图中有几个环 java 有向无环图_排序算法_05

 成员变量:onStack的原理:利用栈的思想进行操作的。如下所示:

java判断无向图中有几个环 java 有向无环图_jvm_06

2.1.2检测有向环实现 161

2.2基于深度优先顶点排序 162

2.2.1顶点排序API设计

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_07

2.2.2顶点排序实现的原理过程

文档P11

2.2.3顶点排序代码的实现及测试 162、163、164

三、加权无向图 165

 

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_08

3.1加权无向图边的表示---加权的边实现 166

java判断无向图中有几个环 java 有向无环图_贪心算法_09

3.2加权无向图边的表示---无向图的实现 167

java判断无向图中有几个环 java 有向无环图_jvm_10

四、最小生成图 168

4.1最小生成树定义及相关约定 168

java判断无向图中有几个环 java 有向无环图_数据结构_11

 

java判断无向图中有几个环 java 有向无环图_排序算法_12

分别计算各个独立的连通图。这些组合在一起称为最小生成森林。

4.2最小生成树原理---切分定理 169

4.2.1树的性质

java判断无向图中有几个环 java 有向无环图_jvm_13

4.2.2切分定理

切分: 

java判断无向图中有几个环 java 有向无环图_jvm_14

横切边:

java判断无向图中有几个环 java 有向无环图_数据结构_15

切分定理:

java判断无向图中有几个环 java 有向无环图_贪心算法_16

java判断无向图中有几个环 java 有向无环图_贪心算法_17

4.3贪心算法 170

基于切分定理实现的

java判断无向图中有几个环 java 有向无环图_数据结构_18

步骤一:

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_19

步骤二:

java判断无向图中有几个环 java 有向无环图_贪心算法_20

步骤三:

java判断无向图中有几个环 java 有向无环图_排序算法_21

 步骤四:

java判断无向图中有几个环 java 有向无环图_排序算法_22

 步骤五:

java判断无向图中有几个环 java 有向无环图_排序算法_23

 步骤六:

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_24

 步骤七:

java判断无向图中有几个环 java 有向无环图_贪心算法_25

 步骤八:直到所有的顶点都被连接起来,则说明查找完毕

 

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_26

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_27

 贪心算法是基础:

求最小生成树的算法都是贪心算法的一种变形

4.4Prim算法 171

java判断无向图中有几个环 java 有向无环图_排序算法_28

Prim算法实现的过程:

步骤一:

java判断无向图中有几个环 java 有向无环图_排序算法_29

 步骤二:

java判断无向图中有几个环 java 有向无环图_jvm_30

 其他的部分依次类推,就可以找到所有的最小生成树了。

4.4.1Prim算法API设计

java判断无向图中有几个环 java 有向无环图_数据结构_31

4.4.2Prim算法的实现原理 172  

参考文档P27

4.4.3Prim算法的代码实现及测试173、174、175

4.5kruskal算法 176

java判断无向图中有几个环 java 有向无环图_排序算法_32

 

java判断无向图中有几个环 java 有向无环图_数据结构_33

 

 是将森林进行连接

4.5.1kruskal算法API设计 

本部分使用了并查集 

java判断无向图中有几个环 java 有向无环图_贪心算法_34

4.5.2kruskal算法的实现原理 177

文档P32

4.5.3kruskal算法代码实现及测试 178、179

五、加权有向图 180

5.1加权有向图边的表示 180

java判断无向图中有几个环 java 有向无环图_排序算法_35

5.2加权有向图的实现 181

java判断无向图中有几个环 java 有向无环图_排序算法_36

 

六、最短路径182

 

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_37

6.1最短路径定义及性质 182

这个不是最小生成树,最小生成树是所有的顶点都要连接起来,这个只是连接需要的两个顶点。

路径:可以是部分的连接

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_38

6.2最短路径树API设计 182

java判断无向图中有几个环 java 有向无环图_排序算法_39

6.3松弛技术 183

java判断无向图中有几个环 java 有向无环图_排序算法_40

 边的松弛:

java判断无向图中有几个环 java 有向无环图_数据结构_41

 顶点的松弛:

java判断无向图中有几个环 java 有向无环图_java判断无向图中有几个环_42

 

6.4Dijstra算法实现及测试 184、185、186