不带权图算法

拓扑排序

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

求拓扑排序算法:
每次选择图中入度为0的点进行删除,不断进行该操作即可得到拓扑排序。(由于是DAG必满足有入度为0的点进行删除,所以拓扑排序也可以检查图是否存在环)

欧拉回路

如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。
如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。
具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图

无向图存在欧拉路径的条件

  • 图连通,并且仅有两个奇度结点或者无奇度结点。

无向图存在欧拉回路的条件

  • 图连通,所有顶点都是偶数度。

有向图存在欧拉路径的条件

  • 图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

有向图存在欧拉回路的条件

  • 图连通,所有的顶点出度=入度。

同时根据定义我们可以有一个结论: 对于有欧拉回路的图,求出其中的一个欧拉路径其必是欧拉回路

无向图求欧拉路径

有向图求法几乎一样,只是需要利用一个栈逆序输出结果

posted @ 2020-11-05 09:15  一个经常掉线的人  阅读(162)  评论(0)    收藏  举报