Foundations of Graph Theory
Last renew: November 8, 2022 am
图论基础
本质上:图是多叉树的延伸
1 |
|
所以:适用于树的DFS/BFS遍历算法全部适用于图
图的实现方法
一般来说我们很少使用Vertex
类来实现图,比较常见的是使用邻接表(Adjacency list)和邻接矩阵(Adjacency matrix)
1 |
|
邻接表是一个很直观的表,我们将每个节点的邻居(对于有向图来说是指向的节点/出度)都存到一个列表中,然后将x和这个列表关联起来。
邻接矩阵是一个二位布尔数组,如果节点x和y相连,matrix[x][y]
设为true
两种方法的优劣
邻接表:
pros: 占用的空间小
cons: 无法快速判断两个节点是否相邻
邻接矩阵与上面相反
使用哪一种要看具体情况。
度(degree)
有向图(Oriented graph)的每个节点被分为入度(indegree)与出度(outdegree)
有向加权图
1 |
|
无向图
很简单,把邻接矩阵中的matrix[x][y]
与matrix[y][x]
都变成true
就可以了,邻接表同理,出度和入度的线全部加入数组即可
图的遍历
数据结构被发明出来无非就是为了遍历和访问 -> 遍历是所有数据结构的基础
图的遍历方法?参考多叉树
1 |
|
但是图可能包含环 (ring)
所以一定需要一个visited[]
辅助
1 |
|