欧拉回路学习笔记
1.定义
-
经过图G中所有边一次且一次行遍所有顶点的通路称为欧拉通路。
-
经过图G中所有边一次且一次行遍所有顶点的回路称为欧拉回路。
(说了和没说一样……
回路要求首尾相连,通路不要求
-
具有欧拉回路的图称为欧拉图。
-
具有欧拉通路但不具有欧拉回路的图称为半欧拉图。
2.定理及推论
无向图G存在欧拉通路的充要条件是:
-
G为连通图。
-
G仅有两个或没有奇度节点
推论:
-
当G是仅有两个奇度节点的无向连通图时,G的无向欧拉通路必以此两个节点为端点。
-
当G是无奇度节点的无向连通图时,G必有无向欧拉回路。
有向图G存在欧拉通路的充要条件是:
-
D为有向图,D的基图连通。
-
所有顶点的出度和入度都相等。
-
或除两个顶点外,其余顶点的出度与入度都相等。而两个顶点中一个顶点的出度与入度之差为1,另一个为-1。
推论:
-
当D除出、入度之差为1,1的两个顶点之外,其余顶点的出度和入度都相等时,D的有向欧拉通路必以出、入度之差为1的顶点作为始点,以出、入度之差为-1的点作为终点。
-
当D的所有顶点的出、入度都相等时,D中存在有向欧拉回路
3.欧拉通路回路的判定
判断欧拉通路是否存在的方法:
有向图
-
基图为连通图
-
有一个顶点出度-入度=1,一个顶点入度-出度=1,其余都是入度=出度。
无向图
-
连通图
-
只有两个顶点是奇度点,其余都是偶度点。
判断欧拉回路是否存在的方法:
有向图
-
基图为连通图
-
所有顶点出度=入度
无向图
-
连通图
-
所有顶点都是偶度点
4.欧拉回路的应用
-
哥尼斯堡七桥问题
-
一笔画问题
-
旋转鼓轮的设计
5.欧拉回路/通路的求解
-
任取G中一顶点$v_0$,令$p_0=v_0$
-
假设沿$p_i=v_0e_1v_1e_2…v_{i-1}e_iv_i$走到顶点$v_i$,按以下方法从$E(G)-{e1,e2,…e_i}$中选$e_{i+1}$
-
$e_{i+1}$与$v_i$相联。
-
除非无别的边可供选择,否则$e_{i+1}$不应该是$E(G')=E(G)-{e1,e2,…e_i}$中的割边。
-
-
当2不能再进行时,所得到的简单回路$P_m=v_0e_1v_1e_2v_2…e_mv_m(v_m=v_0)$为G中的一条欧拉回路。
能不走桥就不走桥,实在无路可走了才去走桥
6.题目
-
-
模版题
-
fot(int &i=head[x];i;i=e[i].nxt)这样写可以变快,并不能判掉重边之类的。 -
for(int i=m-1;i>=0;i--) printf("%d",ans[i])dfs时,递归的时候是倒序存的,所以输出的时候也需要倒序输出。
-
to be continued…
参考:

浙公网安备 33010602011771号