欧拉回路学习笔记

欧拉回路学习笔记


1.定义

  • 经过图G中所有边一次且一次行遍所有顶点的通路称为欧拉通路。

  • 经过图G中所有边一次且一次行遍所有顶点的回路称为欧拉回路。

    (说了和没说一样……

    回路要求首尾相连,通路不要求

  • 具有欧拉回路的图称为欧拉图。

  • 具有欧拉通路但不具有欧拉回路的图称为半欧拉图。


2.定理及推论

无向图G存在欧拉通路的充要条件是:

  • G为连通图

  • G仅有两个或没有奇度节点

推论:

  1. 当G是仅有两个奇度节点的无向连通图时,G的无向欧拉通路必以此两个节点为端点。

  2. 当G是无奇度节点的无向连通图时,G必有无向欧拉回路。

有向图G存在欧拉通路的充要条件是:

  • D为有向图,D的基图连通。

  • 所有顶点的出度和入度都相等。

  • 或除两个顶点外,其余顶点的出度与入度都相等。而两个顶点中一个顶点的出度与入度之差为1,另一个为-1

推论:

  1. 当D除出、入度之差为1,1的两个顶点之外,其余顶点的出度和入度都相等时,D的有向欧拉通路必以出、入度之差为1的顶点作为始点,以出、入度之差为-1的点作为终点。

  2. 当D的所有顶点的出、入度都相等时,D中存在有向欧拉回路


3.欧拉通路回路的判定

判断欧拉通路是否存在的方法:

有向图

  • 基图为连通图

  • 有一个顶点出度-入度=1,一个顶点入度-出度=1,其余都是入度=出度。

无向图

  • 连通图

  • 只有两个顶点是奇度点,其余都是偶度点。

判断欧拉回路是否存在的方法:

有向图

  • 基图为连通图

  • 所有顶点出度=入度

无向图

  • 连通图

  • 所有顶点都是偶度点


4.欧拉回路的应用

  • 哥尼斯堡七桥问题

  • 一笔画问题

  • 旋转鼓轮的设计


5.欧拉回路/通路的求解

佛罗莱算法(无向图)

  1. 任取G中一顶点$v_0$,令$p_0=v_0$

  2. 假设沿$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}$中的割边。

  3. 当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…


参考:

欧拉回路及例题

欧拉回路基本概念+判断+求解

posted @ 2021-08-28 22:02  RapunzelOnly  阅读(261)  评论(0)    收藏  举报