這是
小時候玩兒過的一筆畫圖遊戲,每條線都要畫且只能畫一次,畫的時候筆尖不能離開紙,結束時終點必須回到起點。其實這就是尤拉迴路,可以用深度優先搜尋演算法求解:
1)將圖裝入乙個鄰接表,並求出各節點的連線數
2)建立乙個鍊錶佇列,用於存放路徑中經過的頂點,首先將起點入隊
3)由當前節點向下游搜尋
第乙個鄰接點(不能是自己的上游節點),將其入隊,雙方連線數均減1,
遞迴搜尋該鄰接點的鄰接點,直到無路可走,然後依次返回
4)如果最終返回的不是起點,則說明原圖不是尤拉迴路
且慢,我們可能只是訪問了圖的一部分而提前回到了起點,所以這裡需要:
5)檢查鍊錶佇列,找出第乙個連線數不為0的節點,繼續深度優先搜尋,這將產生乙個新的迴路並自動拼接到原迴路中
6)重複上述過程直到所有節點的連線數都變為0為止
下面的case對全部12個起點求解,執行結果如下:
尤拉迴路 輸出尤拉迴路的路徑
有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...
尤拉迴路 UOJ117 尤拉迴路 題解
判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...
HDU 1878 尤拉迴路(判斷尤拉迴路)
題目大意 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?解題思路 判斷無向圖是否存在尤拉迴路,判斷每個點的度數是否為偶數 並查集確認連通性。1 include2 include3 include4 define clr arr,val...