深度優先搜尋

2021-10-08 12:20:38 字數 1881 閱讀 9533

當不再有白色節點時進行回溯

:#構建圖結構

self.graph =

self.graph[

"1"]=[

"2",

"5"]

self.graph[

"2"]=[

"1",

"6"]

self.graph[

"3"]=[

"4",

"6",

"7"]

self.graph[

"4"]=[

"3",

"7",

"8"]

self.graph[

"5"]=[

"1"]

self.graph[

"6"]=[

"2",

"3",

"7"]

self.graph[

"7"]=[

"3",

"4",

"6",

"8"]

self.graph[

"8"]=[

"4",

"7"]

#節點狀態,未發現(白色)、加入佇列待處理(灰色)、處理完出佇列(黑色)

self.color =

#前驅節點

self.pred =

#節點發現時刻記錄(變成灰色的時刻)

self.d =

#節點發現時刻記錄(變成黑色的時刻)

self.f =

#初始化

for i in

range

(len

(self.graph)):

self.color[

str(i+1)

]="white"

self.pred[

str(i+1)

]="n"#初始化時刻

self.time =

0def

dfs(self,v)

: self.time +=

1 self.d[v]

= self.time

self.color[v]

="gray"

for c in self.graph[v]

:if self.color[c]

=="white"

: self.color[c]

="gray"

self.pred[c]

= v self.dfs(c)

self.color[v]

="black"

self.time +=

1 self.f[v]

= self.time

return self.pred,self.d,self.f,self.color

dfsobj = breadth(

)pred,d,f,color = dfsobj.dfs(

"1")

print

("color:"

,color)

print

("pred:"

,pred)

print

("d:"

,d)print

("f:"

,f)

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...