當不再有白色節點時進行回溯
:#構建圖結構
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")
("color:"
,color)
("pred:"
,pred)
("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...