去年暑假就在ybt上学习了一笔画问题,但理解不够,代码也不熟悉。
在cdqz集训,再做了欧拉路径的题。
先熟悉定理:
定理一
连通的无向图有欧拉路径的充要条件是:
G中奇顶点(连接的边数量为奇数的顶点)的数目等于0或者2。
连通的无向图是欧拉环(存在欧拉回路)的充要条件是:
G中每个顶点的度都是偶数。
定理二
如果连通无向图G 有 2k 个奇顶点,那么它可以用 k 笔画成,并且至少要用 k 笔画成
对有向图来说,一笔画不仅指遍历所有边,而且要遵循正确的方向。
严谨地说,一个连通有向图G有欧拉路径,指存在一个顶点,从它出发,沿着有向边的方向,可以不重复地遍历图中所有的边。
有向图的欧拉回路则是指可以从某一顶点开始,沿有向边的方向不重复地遍历所有边,然后回到原来出发的顶点。用类似于定理一中证明的思路,可以得到有向图一笔画的判定准则:
一个连通的有向图可以表示为一条从顶点u到v的(不闭合的)欧拉路径的充要条件是:
u的出度(从这个顶点发出的有向边的数量)比入度(指向这个顶点的有向边的数量)多1, v 的出度比入度少1,而其它顶点的出度和入度都相等。
一个连通的有向图是欧拉环(存在欧拉回路)的充要条件是以下两个之一:
1.每个顶点的出度和入度都相等;
2.存在一系列的(有向)环C1 C2… Cm,使得图G里的每一条边都恰好属于某一个环。
一笔画问题讨论的是能否不重复地遍历一个图的所有边,至于其中有否顶点的遍历或重复经过则没有要求。哈密顿问题讨论的则是顶点的遍历:能否不重复地遍历一个图的所有顶点?