尤拉迴路
尤拉通路: 通過圖中每條邊且只通過一次
,並且經過每一頂點的
通
路
(頂點並不要求都應經過一遍)
尤拉迴路: 通過圖中每條邊且只通過一次,並且經過每一頂點的迴路
有向圖的基圖:忽略有向圖所有邊的方向,得到的無向圖稱為該有向圖的基圖。
無向圖設g是連通無向圖,則稱經過g的每條邊一次並且僅一次的路徑為尤拉通路;
如果尤拉通路是迴路(起點和終點是同乙個頂點),則稱此迴路是尤拉迴路
具有尤拉迴路的無向圖g成為尤拉圖
有向圖(1)設d是有向圖,d的基圖連通,則稱經過d的每條邊一次並且僅有一次的有向路徑為 有向尤拉通路
(2)如果有向尤拉通路是有向迴路,則稱此有向迴路為 有向尤拉迴路
(3)具有有向尤拉迴路的圖d稱為有向尤拉圖 定理
無向圖g存在尤拉通路的充要條件是:g為連通圖,並且g僅有兩個奇度結點(度數為奇數的頂點)或者無奇度結點。 推論
(1) 當g是僅有兩個奇度結點的連通圖時,g的尤拉通路必以此兩個結點為端點;
(2)當g是無奇度結點的連通圖時,g必有尤拉迴路
(3)g為尤拉圖(存在尤拉迴路)的充分必要條件是 g為無奇度結點的連通圖
(有向圖) 定理
有向圖d存在尤拉通路的充要條件是:d為有向圖,d的基圖連通,並且所有頂點的出度與入度相等;或者 除兩個頂點外,其餘頂點的出度與入度都相等,而這兩個頂點中乙個頂點的出度與入度之差為1,另乙個頂點的出度與入度之差為-1. 推論
(1)當d除出、入度之差為1,-1的兩個頂點之外,其餘頂點的出度與入度相等時,d的有向尤拉通路必以出、入度之差為1的頂點作為始點,以出、入度之差為-1的頂點作為終點。
(2)當d的所有頂點的出、入度都相等時,d中存在有向尤拉迴路。
(3)有向圖d為有向尤拉圖的充要條件是 d的基圖為連通圖,並且所有頂點的出、入度都相等。
尤拉迴路的求解
兩種方法:(1)dfs搜尋 (fleury)佛羅萊演算法
(1)dfs搜尋 思想求解尤拉迴路的思路為:利用尤拉定理判斷出乙個圖存在尤拉通路或尤拉迴路後,選擇乙個正確的起始頂點,用dfs演算法遍歷所有的邊(每條邊只遍歷一次),遇到走不通就回退。在搜尋前進方向上將遍歷過的邊按順序記錄下來。這組邊的排列就組成了一條尤拉通路或迴路。
(2) (fleury)佛羅萊演算法
設g為乙個無向尤拉圖,求g中一條尤拉迴路的演算法如下:
(1) 任取g中一頂點v0,令p0=v0;
(2)假設沿pi=v0e1v1e2v2......eivi走到頂點vi,按下面方法從e(g)-中選ei+1。
ei+1與vi相關聯
除非無別的邊可供選擇,否則ei+1不應該是gi=g-中的橋。
(3)當(2)不能再進行時演算法停止。
可以證明的是,當演算法停止時,所得到的簡單迴路pm=v0e1v1e2v2......emvm,(vm=v0)為g中一條尤拉迴路。
備註知識:
設無向圖g(v,e)為連通圖,若邊集e1屬於e,在圖g中刪除e1中所有的邊後得到的子圖是不連通的,而刪除了e1的任一真子集後得到的子圖是連通圖,則稱e1是g的乙個割邊集。若一條邊構成乙個割邊集,則稱該邊為割邊,或橋
dfs方法**樣例:
1 #include2 #include3 #include4#define n 105
5using
namespace
std;
6int n,m,map[n][n],du[n],pre[105],step=0;7
void dfs(int
start) 13}
14 pre[++step]=start;15}
16int
main()
1726
int k=0,start=1;27
for(int i=1;i<=n;i++)
30if(k==0) printf("
g is a oula huilu\n");
31if(k==2) printf("
g is a oula tonglu\n");
32if(k!=0&&k!=2)
33dfs(start);
34 printf("
start is %d\n
",start);
35for(int i=1;i<=step;i++)
36 printf("
%d "
,pre[i]);
37return0;
38 }
2023年4月15日集訓
題目描述 演算法實現 include include define inf 1000 define maxn 5 儲存迷宮 int maze maxn maxn 記憶化陣列,儲存當前結點到終點的最短路勁 int record maxn maxn 記錄還未訪問的結點,避免結點被重複訪問 bool vi...
2023年2月15日實習日記
重灌了一下qemu,終於執行成功。rhel7成功載入起掛在vgpu的guest。可能是qemu的問題,也可能是 img 檔案多次重啟 之前幾乎都是強制殺死qemu程序而關機的,img可以有所損傷 不過終於載入了 vgpu。發個圖慶祝一下,哈哈,還好沒放棄。mentor說執行幀數不對,明天再看看是啥情...
2023年1月15日訓練日記
今天剛剛出去跑步了才想起來部落格沒寫,序列 s s 被稱為 heapable 當且僅當存在乙個二叉樹 t n 個點均作為 t 的乙個節點,且滿足任意非根節點 sisi 和其父節點 sjsj sj sisj si 且 j現在有乙個序列 a1,a2,ana1,a2,an 相應將其分成若干個 heapab...