图论相关总结

图的构成:

1)图:

G = (V,E) vertex,edge

集合表示: V={ } E={ };//这也就是向前星存图的基础

2)有向图与无向图:

3)有向图:

顶点度 (deg)= 出度(indeg) + 入度(outdeg)

欧拉回路:

欧拉回路:图G中经过每条边一次的回路。
欧拉路径:图G中经过每条边一次的路径。
欧拉图:存在欧拉回路的图。
半欧拉图:存在欧拉路径且不存在欧拉回路的图。

定理1:无向图G为欧拉图,当且仅当G连通且每个点的度数均为偶数。
推论1:无向图G为半欧拉图,当且仅当G连通且除了两个点度数为奇数外,其余个点度数均为偶数。
定理2:有向图G为欧拉图,当且仅当G的基图连通且每个点入度等于出度。
推论2:有向图G为半欧拉图,当且仅当G连通且除了uu入度比出度大11,vv出度比入度大一外,其余个点入度均等于出度。

性质1:设C为欧拉图G中一条简单回路,将C中的边从图GG中删去后得到G′′,G

的每个极大连通子图均为欧拉图。
性质2:设C1、C2

C1​、C2​为图G中没有公共边,但至少有一个公共点的简单回路,则C1、C2​可以合成一个新的回路。

 

Tarjan算法:

基于图的DFS遍历。

时间

在DFS时,按照每个点第一次被访问的顺序,标记每个结点。该标记称为时间戳,记作dfn(u)

搜索树

在DFS时,每个结点只会被遍历一次。若图连通,则所有连接一个未访问结点的边会构成一棵树,不连通则构成一个森林。

追溯值

u出发能访问到的点中,dfn的最小值,称为追溯值,记作low(u)

强连通分量

定义

有向图的极大强连通子图,称为强连通分量,简称SCC。

算法流程

枚举每个为访问的结点进行DFS,并将结点压入栈中。

在DFS时计算dfn,low。

若当前访问结点u满足dfn(u)=low(u),则栈中u及其之后的结点从栈中弹出,这些结点构成一个强连通分量。 重复以上过程,直至所以结点都被访问。

割点

无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合

判定:

1.u为当前搜索树的根结点且uu的子树数量大于1。

2.u不为根且存在树边(u,v)使dfn(u)<=low(v)

割边

在一个无向图中,如果有一个边集,删除这个边集以后,图的连通分量增多,就称这个边集为割边集合。
如果某个割边集合只含有一条边(u,v),那么(u,v)称为一条割边

判定:

  1. 一条边(u,v)为割边,当且仅当(u,v) 在搜索树中且dfn(u)<low(v)

点双连通分量

对于一个连通图,若任意两点之间至少存在两条“点不重复”的路径,则称该图是点双连通的。
对于一个图,点双连通的极大子图称为点双连通分量

不同的点双连通分量最多只有一个公共点,而这个公共点一定是割点。
任意的割点至少是两个不同点双连通分量的公共点。

判定:

仿照求解强连通分量的方法,在dfs时维护一个栈,若当前边(u,v)满足dfn(u)≤low(v)
说明u为割点。将栈中的结点依次弹出,但u不弹出。
注意割点属于多个点双连通分量。

边双连通分量

对于一个连通图,若任意两点之间至少存在两条“边不重复”的路径,则称该图是边双连通的。
对于一个图,边双连通的极大子图称为边双连通分量

割边不属于任何一个边双连通分量

根据变双联通分量的定义,只需求一遍割边。然后删去割边,原图会分裂成若干个连通块,每个连通块就是一个边双连通分量。

DAG :有向无环图

拓扑排序

扫描每个结点,把入度为 0的结点加入队列。

从队列开始,每次取出队首元素,扫描其出边,将其到达的顶点入度减1

重复2,直到队列为空。

 

其他连通相关

https://blog.csdn.net/lin375691011/article/details/18092577

强连通图,强连通子图(分支)

https://blog.csdn.net/lixiaoguai2017/article/details/85457160

距离与连通性

posted @ 2019-09-06 17:45  Tianwell  阅读(316)  评论(0编辑  收藏  举报