332. Reconstruct Itinerary

1. 關鍵:directed graph & visit each path exactly once

2. 涉及的圖論知識:Eulerian path

2.1 什么graph才有Eulerian Path?

  1. 在無向圖中,所有頂點的度數均為偶,則存在 Eularian cycle;若有且僅有兩個頂點的度數為奇,其余的都為偶,則存在 Eularian path;
  2. 在有向圖中,所有頂點的入度數等于出度數,則存在 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!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容