天天看點

python 回溯法 子集樹模闆 系列 —— 8、圖的周遊

一個圖:

A --> B

A --> C

B --> C

B --> D

B --> E

C --> A

C --> D

D --> C

E --> F

F --> C

F --> D

從圖中的一個節點E出發,不重複地經過所有其它節點後,回到出發節點E,稱為一條路徑。請找出所有可能的路徑。

将這個圖可視化如下:

python 回溯法 子集樹模闆 系列 —— 8、圖的周遊

本問題涉及到圖,那首先要考慮圖用那種存儲結構表示。鄰接矩陣、鄰接表、...都不太熟。

接下來對問題本身進行分析:

顯然,問題的解的長度是固定的,亦即所有的路徑長度都是固定的:n(不回到出發節點) 或 n+1(回到出發節點)

每個節點,都有各自的鄰接節點。

對某個節點來說,它的所有鄰接節點,可以看作這個節點的狀态空間。周遊其狀态空間,剪枝,深度優先遞歸到下一個節點。搞定!

至此,很明顯套用回溯法子集樹模闆。

python 回溯法 子集樹模闆 系列 —— 8、圖的周遊