1. 關鍵:directed graph & visit each path exactly once
2. 涉及的圖論知識:Eulerian path
2.1 什么graph才有Eulerian Path?
- 在無向圖中,所有頂點的度數均為偶,則存在 Eularian cycle;若有且僅有兩個頂點的度數為奇,其余的都為偶,則存在 Eularian path;
- 在有向圖中,所有頂點的入度數等于出度數,則存在 Eularian cycle;若有且僅有兩個頂點:其中2一個入度數比出度數大 1,另一個入度數比出度數小 1,其余的頂點入度數等于出度數,則存在 Eularian path.
3. 算法:Hierholzer's algorithm
3.1 思想
參考1:歐拉回路
Hierholzer's algorithm
參考2: leetcode dis
Hierholzer's algorithm
首先從起點JFK出發,dfs找到一個sub-path: JFK->A->C->D->A,在A處出現dead end(不再有可以走的邊),此時將A加到解當中,dfs返回。對于返回到的節點D,還有可以繼續走的subpath,dfs繼續找,得:D->B->C->JFK->D。此時的D為dead end,說明可以將D加到解當中,而且處于已經加過的點之前。以此類推,每次都加dead end的節點。直到所有點都是dead end!