最近在寫分支定界求TSP的一個小項目,涉及到圖和樹的各種知識,就淺淺的從無向圖的遍歷開始總結一下近期的學習工作,使用DFS的遞歸遍歷無向圖。
鄰接矩陣、鄰接表等都可以用來表示一張圖,這里使用鄰接表數組來表示,即以頂點為索引的列表數組,具體實現使用字典來創建鄰接表數組。
深度優先搜索DFS簡單地來說,就是在訪問其中一個頂點時,將它標記為已訪問,遞歸的訪問它所有沒有被標記的相鄰頂點。
老習慣,上代碼。
運行看結果。
淺淺的分析一下遞歸的過程
dfs(0) ---dfs(1)---0已經被標記了,下一個dfs(3)---1已經被標記了,所以下一個dfs(2)---graph[2]里的0,3都被標記了,回到graph[3],接著dfs(5)--3已經被標記了,所以dfs(6)---接下來就簡單了,dfs(4)。好像就結束了應該是這樣吧。
到這里如果就結束的話,顯得敷衍,折騰了一下,實現了一個簡單有點笨的s-v的路徑構建的功能,還是用上面的例子來說明,最后visited = [0,1,3,2,5,6,4],根據這個標記順序,會有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規則)。
首先運行前面的dfs,得到 visited = [0,1,3,2,5,6,4],根據這個標記順序,會有且僅有0-1,1-3,3-2,3-5,5-6,6-4被選中(別問為什么,這是我的規則)。看第4和5行,將構建u-v的路徑轉為構建v-u的路徑。
會有人好奇為啥0到5的路徑為啥不是0-3-5這條,因為0-3沒有被標記啊!至于為什么,這就是我的規則,別管(懂的自然會懂我的心路歷程,不懂就算,反正構建路徑又不對成本、距離等做要求)。
審核編輯:劉清
-
python
+關注
關注
56文章
4782瀏覽量
84456 -
TSP
+關注
關注
1文章
24瀏覽量
16909 -
DFS
+關注
關注
0文章
26瀏覽量
9154
發布評論請先 登錄
相關推薦
評論