尤拉迴路及哈密頓迴路淺見

2021-06-22 16:53:21 字數 1127 閱讀 7201

**:

尤拉圖:

在圖為連通圖的前提下,尤拉通路:當前圖中經過每條邊一次且僅一次,若最終回到出發點則稱為尤拉迴路。

相關判定條件(圖聯通)

(1)無向圖存在尤拉迴路的條件是:圖中不存在奇度結點,有向圖存在尤拉迴路的條件是:每個結點出度均等於入度。

(2)無向圖存在尤拉通路的條件是:圖中僅存在兩個奇度結點(起點和終點),有向圖存在尤拉通路的條件是:存在兩個結點入度不等於出度,分別為起點(出度-入度==1)和終點(入度-出度==1)

除此之外個人認為無向圖只要存在尤拉迴路則從任意一點出發均可遍歷全部邊回到該點(哈密頓圖同理)。

判定尤拉圖只是基礎,更重要的是找出具體的尤拉路徑(迴路)

演算法:使用鏈式前向星儲存圖(便於找邊),可先通過並查集(或者廣搜)判斷當前圖是否連通,然後還能記錄出入度根據之前定理判定。然後通過深搜並且標記每一條走過的邊確定是否有尤拉路徑(迴路),演算法整體思路較簡單,關鍵是能否想到利用尤拉路徑(迴路)建立模型。

哈密頓圖:

在圖為無向連通圖的前提下,哈密頓通路:經過每個頂點一次且僅一次,若最終回到出發點則稱為哈密頓圖,哈密頓圖為np完全問題,暫不存在多項式時間內的解法

相關判定條件(圖無向且連通)

(1)若圖有n個結點的無向圖且任意兩個不同的結點度數之和均大於n,則此圖為哈密頓圖(存在哈密頓迴路),此為判斷是否是哈密頓圖的充分條件,也就是說滿足這個條件一定是哈密頓圖,但哈密頓圖不一定必滿足這個條件。

演算法:(前提是圖有n個結點的無向圖且任意兩個不同的結點度數之和均大於n)

選取任意結點作為s,與其相鄰一結點為t,然後逐步向兩邊擴充套件至無法擴充套件為止,若此時s與t連通,則判斷是否s->t中包含全部點,若不連通則查詢s->t中結點v[i]與t相鄰且v[i+1]與s相鄰的點,即s->v[i]->v[i+1]->t,而此時s ->v[i+1],t->v[i],將v[i+1]及其後部分翻轉可構成s->v[i]->t->v[i+1]的哈密頓迴路,判斷此時是否路徑包含全部結點,若不包含,查詢不屬於迴路中但與其中結點相鄰的結點,然後可將此迴路縮為一點(因為已經求得當前迴路為哈密頓迴路)再修改s、t重複上述過程。

尤拉路徑(迴路)相關題目:uva10054、poj2230、hdu1116

哈密頓(迴路)相關題目:poj2438

uva10054(每乙個珠子首尾連線構成無向圖)

尤拉迴路及哈密頓迴路淺見

尤拉圖 在圖為連通圖的前提下,尤拉通路 當前圖中經過每條邊一次且僅一次,若最終回到出發點則稱為尤拉迴路。相關判定條件 圖聯通 1 無向圖存在尤拉迴路的條件是 圖中不存在奇度結點,有向圖存在尤拉迴路的條件是 每個結點出度均等於入度。2 無向圖存在尤拉通路的條件是 圖中僅存在兩個奇度結點 起點和終點 有...

哈密頓迴路

圖類 include include include include includeusing namespace std template t為頂點的資料型別,e為圖中邊的權值的資料型別 class graph 返回最大頂點數 int numberofedges 返回當前邊數 t getvalue...

哈密頓迴路

哈密頓迴路好多,其實不是很難,但是看了一天了。看一會睡一會,什麼狀態啊。view code 題目 題目分析 有敵對關係的小朋友,不能坐在一起。最後圍成乙個圈,吃飯。將小朋友看成點,有敵對關係的看成沒有邊,最後構成乙個迴路。哈密頓迴路。小小總結 哈密頓迴路 充分條件 無向連通圖中任意2點度數之和大於等...