深度优先搜索
当不再有白色节点时进行回溯
class Breadth():
def __init__(self):
#构建图结构
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 = 0
def 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)