一、图的基本概念
1.什么是图
图表示一种多对多的关系。图包括:
1)一组顶点:通常用 V (Vertex) 表示顶点集合
2)一组边:通常用 E (Edge) 表示边的集合
3)边是顶点对:(v, w)
∈
\in
∈ E ,其中 v, w
∈
\in
∈ V ;有向边 < v, w> 表示从v指向w的边(单行线);不考虑重边和自回路。
2.数据类型描述
数据对象集:G(V,E)由一个非空的有限顶点集合V和一个有限边集合E组成。
3.图的表示
1)邻接矩阵
2)邻接表
邻接表:G[N]为指针数组,对应矩阵每行一个链表,只存非0元素。
3)两种的比较:
邻接矩阵:
1)方便检查任意一对顶点间是否存在边
2)方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
3)方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)
但是对于稀疏的图,十分浪费空间和时间。
邻接表:
1)方便找任一顶点的所有“邻接点”
2)节约稀疏图的空间:N个头指针 + 2E个结点(每个结点至少2个域)
3)对于无向图方便计算度,但是对于有向图,只方便计算出度,如果需要计算入度,需要一个逆邻接表。
4)不方便查找任意两顶点之间是否有边相连
对于稀疏的图,方便,对于稠密的图不如邻接矩阵省空间;而且如果点和边有权值,则需要更多的存储空间,但是邻接矩阵就可以直接修改矩阵中的值。
二、图的遍历
1.图连通的概念
连通:如果从V到W存在一条(无向)路径,则称V和W是连通的
路径:V到W的路径是一系列顶点{V, v1, v2, …, vn, W}的集合,其中任一对相邻的顶点间都有图
中的边。路径的长度是路径中的边数(如果带权,则是所有边的权重和)。如果V到W之间的所
有顶点都不同,则称简单路径
回路:起点等于终点的路径
连通图:图中任意两顶点均连通
连通分量:无向图的极大连通子图:两个条件:
极大顶点数:再加1个顶点就不连通了
极大边数:包含子图中所有顶点相连的所有边
强连通:有向图中顶点V和W之间存在双向路径,则称V和W是强连通的
强连通图:有向图中任意两顶点均强连通
强连通分量:有向图的极大强连通子图
2.广度优先、深度优先搜索
三、图中最短路径问题
1.概念
在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。
这条路径就是两点之间的最短路径(Shortest Path):
第一个顶点为源点(Source)
最后一个顶点为终点(Destination)
2.Dijkstra算法
对于无权图最短路径搜索的算法其实就是广度优先深度优先的形式,而对于有权图,最基本的算法就是Dijkstra算法。
2021.5.21
四、最小生成树
1.基本概念
2.Prim算法
3.Kruskal算法
2021.5.21
# 五、拓扑排序 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序,获得一个拓扑序的过程就是拓扑排序。