DFS應用 尋找尤拉迴路

2021-07-07 10:00:13 字數 1963 閱讀 2630

0.1)本文總結於 資料結構與演算法分析, 源**均為原創, 旨在 理解「dfs應用——尋找尤拉迴路」的idea 並用源**加以實現(源**,我還沒有找到一種有效的資料結構和dfs進行結合,往後會po出)

1.1)尤拉迴路定義:我們必須在圖中找出一條路徑, 使得該路徑對圖的每條邊恰好訪問一次。如果我們要解決「附加的問題」, 那麼我們就必須找到乙個圈, 該圈恰好經過每條邊一次, 這種圖論問題在2023年 由尤拉解決, 它標誌著圖論的誕生;根據特定問題的敘述的不同,這種問題通常稱為 尤拉路徑(euler path, 有時稱為尤拉環遊——euler tour)或尤拉迴路(euler circuit);

1.2)我們的第乙個觀察是, 其終點必須終止在起點上的 尤拉迴路只有當圖是連通的並且每個頂點的度(即邊的條數)是偶數時才有可能存在。這是因為, 在尤拉迴路中, 乙個頂點有邊進入,必然有邊離開。如果任一頂點v 的度為奇數, 那麼實際上 我們早晚將會達到這樣一種地步,即只有一條進入v 的邊尚未被訪問到,若沿該變進入v點, 那麼我們只能停在頂點v, 不可能再出來。

1.3)如何得到尤拉環遊:如果恰好有兩個頂點的度是奇數, 那麼當我們從乙個奇數度的頂點出發 最後終止在另乙個奇數度的頂點時,仍然有可能得到乙個尤拉環遊;這裡, 尤拉環遊是必須訪問圖的每一邊 但最後不一定必須回到起點的路徑。如果奇數度的頂點多於兩個, 那麼尤拉環遊也是不可能存在的;

1.4)以上觀察,給我們提供了尤拉迴路存在 的乙個必要條件,實際上,它也是乙個充分條件——也就是說, 所有頂點的度均為偶數的任何連通圖必然有尤拉迴路;

step1)尤拉迴路的初始圖

step2)設從頂點5開始,遍歷5、4、10、5,(這裡只是尤拉迴路的一種可能的路徑case)

step3)我們從頂點4繼續遍歷,因為它還帶有未遍歷的邊;我們把本次遍歷的路徑拼接到上一次遍歷的路徑5, 4, 10, 5中, 進而得到新路徑如下圖所示:

step4)這時,路徑上存有未被訪問的邊的下乙個頂點是3, 此時可能的遍歷路徑是3, 2, 8, 9, 6, 3;同理,拼接路徑後,得到新路徑如下圖所示:

step5)這時, 在本路徑上,帶有未被遍歷邊的下乙個頂點是9, 演算法找到迴路9, 12, 10, 9;同理,拼接路徑後,得到新路徑如下圖所示:

4.1)哈密爾頓圈問題:乙個非常相似的問題是在無向圖中尋找乙個簡單的圈, 該圈通過圖的每個頂點;(雖然看起來這個問題和 尤拉迴路差不多, 但是對它卻沒有已知的有效演算法)

5.1)download source code:

5.2)source code at a glance:(for complete code , please click the given link above)

5.3)printing results:

HDU 1878 尤拉迴路(DFS)

include includeusing namespace std int maps 1005 1005 int in 1005 int book 1005 int n,m int dfs int a int main while scanf d n if n 0 return 0 scanf d...

UVA10129 尤拉迴路 DFS

第一次寫部落格,以前一直沒有總結過,現在開始對自己學的東西做一些記錄吧,方便以後複習或者就當作留個腳印。筆者目前大一,水平弱弱弱 有不正確的地方或者可以改進的地方還望指出。找夥伴,有想一起學習的朋友可以一起交流交流。email zpengst outlook.com 題目大意 輸入n個單詞,判斷是否...

太鼓達人 尤拉迴路 DFS

給出乙個01串,從不同的位置出發沿順時針方向找可以得到 m role presentation m m個長度為 k role presentation k k的01串。且這 m role presentation m m個01串是互不相同的。給出k的值,請你求出 m role presentatio...