欧拉图

膜拜 alex_wei 就对了

无论是对于无向图还是有向图而言,必要性都是显然的。考虑最终欧拉回路的形态,每次进入一个点,都要从该点走出去,所以出边和入边必须两两抵消。对于起始点,它一开始走出去的边和最后走回它的边同样抵消了,所以有向图存在欧拉回路必须满足每个点出度和入度相等。同理可证无向图每个点的度数必须为偶数。
考虑一个点倘若出边与入边是不平衡的,那么我们考虑欧拉回路每条边只能经过一次,那么是不是会有出边条不交的路径,这些路径都需要回到当前点,但由于入边少,所以会有入边被经过不止一次,不符定义。故不成立。

对于无向图和有向图的欧拉通路,注意必须从奇点或唯一的出度大于入度的点开始 dfs。其它地方和欧拉回路没有区别。
考虑欧拉回路的构造是先找回路(环),然后对于回路上的边删掉,然后再对回路上的点找欧拉回路,然后再通过这个环拼在一起。因为我们已经证明了只要符合判定条件,那么爆搜一定能搜到环(回到爆搜起点)这样就是欧拉回路的充分性以及算法流程。
考虑初始的边找环再递归实在没必要。考虑找环的过程中最后一次回溯到这个点(不会再递归了),是不是一定是在上面算法流程所找的第一个环。那么其他分支小环已经找好了,那么我们只需要将当时的点压入答案栈中然后回溯即可。
考虑欧拉路径与欧拉回路的构造关系,是不是只要把第一次找的环变成路径,其他分支还是找回路就行了?那么从哪开始能找到第一次的路径?显然是判定的起点开始,那么因为它无法回到自己,所以会在判定的终点时就结束这条路径了。正确性显然。

posted @ 2022-08-10 23:58  FxorG  阅读(124)  评论(0编辑  收藏  举报