最近在寫分支定界求TSP的一個小項目,涉及到圖和樹的各種知識,就淺淺的從無向圖的遍歷開始總結(jié)一下近期的學習工作,使用DFS的遞歸遍歷無向圖。
鄰接矩陣、鄰接表等都可以用來表示一張圖,這里使用鄰接表數(shù)組來表示,即以頂點為索引的列表數(shù)組,具體實現(xiàn)使用字典來創(chuàng)建鄰接表數(shù)組。

深度優(yōu)先搜索DFS簡單地來說,就是在訪問其中一個頂點時,將它標記為已訪問,遞歸的訪問它所有沒有被標記的相鄰頂點。
老習慣,上代碼。

運行看結(jié)果。

淺淺的分析一下遞歸的過程

dfs(0) ---dfs(1)---0已經(jīng)被標記了,下一個dfs(3)---1已經(jīng)被標記了,所以下一個dfs(2)---graph[2]里的0,3都被標記了,回到graph[3],接著dfs(5)--3已經(jīng)被標記了,所以dfs(6)---接下來就簡單了,dfs(4)。好像就結(jié)束了應該是這樣吧。
到這里如果就結(jié)束的話,顯得敷衍,折騰了一下,實現(xiàn)了一個簡單有點笨的s-v的路徑構(gòu)建的功能,還是用上面的例子來說明,最后visited = [0,1,3,2,5,6,4],根據(jù)這個標記順序,會有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規(guī)則)。

首先運行前面的dfs,得到 visited = [0,1,3,2,5,6,4],根據(jù)這個標記順序,會有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規(guī)則)。看第4和5行,將構(gòu)建u-v的路徑轉(zhuǎn)為構(gòu)建v-u的路徑。
會有人好奇為啥0到5的路徑為啥不是0-3-5這條,因為0-3沒有被標記啊!至于為什么,這就是我的規(guī)則,別管(懂的自然會懂我的心路歷程,不懂就算,反正構(gòu)建路徑又不對成本、距離等做要求)。
審核編輯:劉清
-
python
+關注
關注
57文章
4876瀏覽量
90025 -
TSP
+關注
關注
1文章
26瀏覽量
17438 -
DFS
+關注
關注
0文章
26瀏覽量
9598
發(fā)布評論請先 登錄
LTC4418:雙路優(yōu)先 PowerPath 控制器的深度解析與應用指南
京東關鍵詞搜索商品列表的Python爬蟲實戰(zhàn)
1688搜索店鋪列表API使用指南
1688拍立淘圖片搜索API概述
沒有專利的opencv-python 版本
CS32L010系列能否支持串口的發(fā)送和接收中斷單獨配置?不同中斷的中斷優(yōu)先級如何設置?
Termux中調(diào)試圣誕樹Python代碼
解析淘寶拍立淘按圖搜索API接口與JSON數(shù)據(jù)示例參考
深度解析淘寶拍立淘按圖搜索API接口與JSON數(shù)據(jù)示例參考
蘇寧搜索接口深析:全品類智能分軌如何解決 O2O 電商的搜索痛點?
按圖搜索1688商品的API接口
阿里巴巴國際站關鍵字搜索 API 實戰(zhàn):3 步搞定多語言適配 + 限流破局,詢盤量提升 40%
dfs_v1,vnode引用計數(shù)只增不減,無法釋放怎么解決?
零基礎入門:如何在樹莓派上編寫和運行Python程序?
DFS深度優(yōu)先搜索python代碼
評論