前面讲过了无向图,有向图求欧拉回路,欧拉通路的做法。可以直接根据度数来判断,当然前提是这是一个连通图。
这道题既有无向边,又有有向边,然后求欧拉回路。
采用的方法是最大流。
具体处理方法。
首先,我们对无向边,进行随意定边。定完边之后,求出每个点的出度入度。如果某个点的出度入度之差为奇数,那么就无法形成欧拉回路。
接下来所有的点的度数之差都是偶数了,对于有向边,我们不需要处理。
对于无向边,我们给初始随意定的边的方向,流量+1,即如果一条无向边,a - b,我们初始给他定边是a -> b,那么我们将a -> b的流量+1。
然后对于每个入度出度之差为偶数的点,如果出度大于入度。那么我们连一条S到该点的边,流量为 (出度 - 入度)/ 2 。
同理,对于入度大于出度的边,我们连一条该点到T的边,流量为(入度- 出度)/ 2 。
接下来我们跑一遍最大流即可以了。
如果该图是满流的话,那么证明存在欧拉回路。否则不存在。
CODE:
[cpp] view plaincopyprint
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include