1 定義
尤拉通路 (euler tour)——通過圖中每條邊一次且僅一次,並且過每一頂點的通路。
尤拉迴路 (euler
circuit)——通過圖中每條邊一次且僅一次,並且過每一頂點的迴路。
尤拉圖——存在尤拉迴路的圖。
2 無向圖是否具有尤拉通路或迴路的判定
g有尤拉通路的充分必要條件為:g
連通,g中只有兩個奇度頂點(它們分別是尤拉通路的兩個端點)。
g有尤拉迴路(g為尤拉圖):g連通,g中均為偶度頂點。
3 有向圖是否具有尤拉通路或迴路的判定
d有尤拉通路:d連通,除兩個頂點外,其餘頂點的入度均等於出度,這兩個特殊的頂點中,乙個頂點的入度比出度大1,另乙個頂點的入度比出度小1。
d有尤拉迴路(d為尤拉圖):d連通,d中所有頂點的入度等於出度。
4 混合圖。混合圖也就是無向圖與有向圖的混合,即圖中的邊既有有向邊也有無向邊。
5 混合圖尤拉迴路
混合圖尤拉迴路用的是網路流。
把該圖的無向邊隨便定向,計算每個點的入度和出度。如果有某個點出入度之差為奇數,那麼肯定不存在尤拉迴路。因為尤拉迴路要求每點入度
= 出度,也就是總度數為偶數,存在奇數度點必不能有尤拉迴路。
現在每個點入度和出度之差均為偶數。將這個偶數除以2,得x。即是說,對於每乙個點,只要將x條邊反向(入》出就是變入,出》入就是變出),就能保證出
= 入。如果每個點都是出 = 入,那麼很明顯,該圖就存在尤拉迴路。
現在的問題就變成了:該改變哪些邊,可以讓每個點出 =
入?構造網路流模型。有向邊不能改變方向,直接刪掉。開始已定向的無向邊,定的是什麼向,就把網路構建成什麼樣,邊長容量上限1。另新建s和t。對於入 >
出的點u,連線邊(u, t)、容量為x,對於出 > 入的點v,連線邊(s,
v),容量為x(注意對不同的點x不同。當初由於不小心,在這裡錯了好幾次)。之後,察看是否有滿流的分配。有就是能有尤拉迴路,沒有就是沒有。檢視流值分配,將所有流量非
0(上限是1,流值不是0就是1)的邊反向,就能得到每點入度 = 出度的尤拉圖。
由於是滿流,所以每個入 >
出的點,都有x條邊進來,將這些進來的邊反向,ok,入 = 出了。對於出 > 入的點亦然。那麼,沒和s、t連線的點怎麼辦?和s連線的條件是出 >
入,和t連線的條件是入 > 出,那麼這個既沒和s也沒和t連線的點,自然早在開始就已經滿足入 =
出了。那麼在網路流過程中,這些點屬於「中間點」。我們知道中間點流量不允許有累積的,這樣,進去多少就出來多少,反向之後,自然仍保持平衡。
以上內容**:
其實還可以再深入一步:求出尤拉迴路的路徑
只要將殘餘網路中的滿流邊(不包括以s,t為端點的邊)與一開始設定的方向反向即可,最後求一遍有向圖的尤拉迴路(dfs)即可~
ps:求混合圖的尤拉路徑也應該可以用網路流做吧。。按照定義做應該是可以的~不過好像沒有這個題,我是沒找到~
view code
#include #include#include
#include
#include
#include
#define n 500
#define m 20000
#define inf 1e9
using
namespace
std;
inthead[n],to[m],next[m],len[m];
int q[m*10
],layer[n];
intpin[n],pout[n];
intn,m,s,t,cas,cnt,sum;
inline
void add(int u,int v,int
w)inline
bool
read()
for(int i=1;i<=n;i++)
return
true;}
inline
bool
bfs()
}return layer[t]!=-1;}
inline
int find(int u,int
cur_flow)
if(!res) layer[u]=-1
;
return
res;
}inline
void
go()
intmain()
return0;
}
UVA 10735 最大流 混合尤拉迴路 輸出路徑
分類 uva la 圖論 2013 07 21 11 13 125人閱讀收藏 舉報題意 給你乙個圖,有n個點,m條邊,有單向邊和雙向邊 讓你是否存在尤拉迴路,有就輸出路徑 1.判斷是否有尤拉迴路 可以用最大流來判斷 首先,我們從結論出發 存在尤拉迴路的充要條件是 每個點的入度等於出度。先把所用無向邊...
POJ1149 養豬(最大流)
題目描述 尼克在一家養豬場工作,這家養豬場共有m間鎖起來的豬舍,由於豬舍的鑰匙都給了客戶,所以尼克沒有辦法開啟這些豬舍,客戶們從早上開始乙個接乙個來購買生豬,他們到達後首先用手中的鑰匙開啟他所能開啟的全部豬舍,然後從中選取他要買的生豬,尼克可以在此期間將開啟的豬舍中的豬調整到其它開著的豬舍中,每個豬...
POJ 1273 樸素的最大流
poj 1273 ditch mike w 2011 10 5 今天我才發現,我對殘餘網路理解有誤!include include include include ifndef true define true 1 endif define size 222 define qsize 2 size ...