目录
2,若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
性质2. 入度为0的点信息确定,删掉入度为0的点以及出边后,新的入度为0的点信息也唯一确定。
由此建立邻接表。可得第一次入度为零的点为“1”“2” 将此两点入度
所以先将1指向的点和边删除,并将指向的点(3,4)的入度-1;得到下图
由于第一次入度为零的点还有“2”,将1删除后,点“2”还在队中,所以同上操作,得到图三
由上图得:点3的入度为零,所以按照操作将“3”入队,出队,删边,删除边指向的点的入读-1;
1. 生成树是一个连通子图,是给定图的一个子集,它连接了所有节点且没有环。(有环可以减少一条边)
2. 生成树形态不止一种,且含有图中全部n个顶点,以及包含图中n-1条边。
一,定义:
1,有向无环图
如果有一个非有向无环图,且A点出发向B经C可回到A,形成一个环。将从C到A的边方向改为从A到C,则变成有向无环图。有向无环图的生成树个数等于入度非零的节点的入度积。(from baidu)
若一个有向图不存在环,则称为有向无环图【字面意思】这个东西就叫做DAG(Directed Acyclic Graph),
如图所示:

2,拓朴排序
在图论中,拓扑排序(Topological Sorting)是一个有向无环图的所有顶点的线性序列。且该序列必须满足下面两个条件:
1,每个顶点出现且仅仅出现一次。
2,若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。
由拓朴排序的定义可知:只有DAG才有拓扑排序,其余没有拓扑排序一说。
二,DAG的性质
性质1. 从任意一个起点进行dfs,必不会陷入死循环。
性质2. 入度为0的点信息确定,删掉入度为0的点以及出边后,新的入度为0的点信息也唯一确定。
三,拓扑排序的遍历
在dij和spfa等算法中,任意点都会重复更新多次,所以会导致时间复杂度提高。在拓扑排序中,不是从起点(任意点)开始遍历,而是从入度为0的点开始遍历,这样该点就不会有其它点进行更新它。所以这样每个点和边都只会被遍历一次。
所以拓朴排序的时间复杂度为n(n+m).
拓扑排序的大致过程:
- 从 图中选择一个 入度为0的顶点并入度。
- 当该节点出队时,将该节点所指向边的节点入度-1如果新节点入度为零,则将新节点入度。
- 重复 1 和 2 直到当前图为空或当前图中不存在入度为零的顶点为止。后一种情况说明有向图中必然存在环。当所有节点都入过队列,则当前图存在拓扑排序,则该图为DAG图。
四,例题
1,有向图的拓扑序列
题目:(要求详见图)

使用图片理解拓扑排序(也是该图的模拟过程)
1,在不考虑边权的情况下 输入数据为:
6 7(点数,边数)
1 3
1 4
2 5
4 5
3 6
5 6
3 4
由此建立邻接表。可得第一次入度为零的点为“1”“2” 将此两点入度

所以先将1指向的点和边删除,并将指向的点(3,4)的入度-1;得到下图


最低0.47元/天 解锁文章
3583

被折叠的 条评论
为什么被折叠?



