尤拉路徑相關知識

2021-08-08 07:42:11 字數 1279 閱讀 3144

首先說說概念:

設g是無向連通圖, 則稱經過g的每條邊一次且僅一次的路徑為尤拉通路.

如果尤拉通路是迴路, 那麼該迴路為尤拉迴路.

具有尤拉迴路的無向圖g稱為尤拉圖.

如果g是有向圖, 並且g的基圖聯通. 那麼由上面的定義中所有的名次加上乙個有向即可…

相關定理:

1: 無向圖g存在尤拉通路的充要條件是: g為連通圖, 並且g僅有兩個奇度節點或者無奇度節點

2: 當g有兩個奇度節點的連通圖時, g的尤拉桐廬必以次兩個節點為端點.

3: g為尤拉圖(g存在尤拉迴路)的充要條件是g為無奇度節點的連通圖.

4: 有向圖d存在尤拉通路的充要條件是: d為有向圖, d的基圖連通, 並且所有頂點的出度和入度相等; 或者除兩個點外, 其餘頂點的出度和入度都相等, 而這兩個頂點中乙個頂點出入度之差為1, 另乙個為-1.

5: 若有這兩個點, 那麼一定是以出入度之差為1作為起點, 另乙個作為終點.

6: d為有向尤拉圖(d存在有向尤拉迴路)的充要條件是d的基圖連通, 並且所有的頂點出入度都相等.

用以上定理可以解決一些直接判定問題. 而這些問題的關鍵在於如何把問題轉化為圖的模型. 這些多做題就自然有這種感覺.

那麼還有一類問題, 就是如何輸出尤拉路徑了. 普遍的方法有兩種, 一是dfs爆搜每一條邊, 走不通就不走, 直到搜出正解. 還有一種是叫弗洛萊演算法. 它的思想是, 從出發點出發開始尋找可以擴充套件的邊, 並且對於當前的情況, 優先找不是 橋 的邊. 然後遞迴輸出, 即可. 模板如下: 因為涉及到了刪邊的處理, 那麼用臨接矩陣存圖.

模板題

fleury演算法板子(只是對於圖中有點,邊無資訊的):

/**@cain*/

const

int maxn = 1e3+5;

int cas=1;

int du[maxn],path[maxn];

int n,m,top=0;

void dfs(int u)

}path[top++] = u;

}void solve()

int flag = 1;

for(int i=1;i<=n;i++)

}if(flag) dfs(1); //尤拉迴路的情況.

for(int i=0;i"%d%c",path[i],i==top-1?'\n':' ');

}}

一般標記邊的可以用鏈式前向星做, 一般對於邊上有資訊的, 點不重要的…..

隨機應變…(板子在另外的部落格裡面)

暫時就姜這麼多了…..

尤拉路徑 尤拉迴路

尤拉迴路 連通圖,一條路徑恰好經過所有邊一次,並且構成迴路 起點終點相同 尤拉路徑 連通圖,一條路徑恰好經過所有邊一次 起點終點不必相同 具有尤拉迴路的圖稱尤拉圖,具有尤拉路徑但不具有尤拉迴路的圖稱半尤拉圖 無向圖尤拉迴路的判斷 連通圖,所有頂點度數均為偶數 無向圖尤拉路徑的判斷 連通圖,只有兩頂點...

尤拉迴路 尤拉路徑

尤拉路徑 如果圖 g 種的一條路徑包括所有的邊,且僅通過一次的路徑.尤拉迴路 能回到起點的尤拉路徑.混合圖 既有無向邊又有無向邊的圖.hierholzer演算法自動尋找尤拉迴路,在找不到尤拉迴路的情況下會找到尤拉路徑。前提是得給它指定好起點。演算法流程 無向圖 1.判斷奇點數。奇點數若為0則任意指定...

尤拉路徑和尤拉迴路的路徑

尤拉路徑和尤拉迴路 尤拉路徑 從某結點出發一筆畫成所經過的路線叫做尤拉路徑。尤拉迴路 在尤拉路徑的基礎上又回到起點。a 凡是由偶點組成的連通圖,一定可以一筆畫成。畫時可以把任一偶點為起點,最後一定能以這個點為 終點畫完此圖。b 凡是只有兩個奇點的連通圖 其餘都為偶點 一定可以一筆畫成。畫時必須把乙個...