from ds.Graph import Graph
class DFSGraph(Graph):
def __init__(self):
super().__init__()
self.time = 0
def dfs(self):
for v in self:
v.setColor('white')
v.setPred(None)
for v in self:
if v.getColor() == 'white':
self.dfsvisit(v)
def dfsvisit(self,startV):
startV.setColor('gray')
self.time += 1
startV.discoveryTime = self.time
for nbr in startV.getConnections():
if nbr.getColor() == 'white':
nbr.setPred(startV)
self.dfsvisit(nbr)
startV.setColor('black')
self.time+=1
startV.finishTime = self.time
if __name__ == '__main__':
g = DFSGraph()
# g.addVertex('一个鸡蛋')
# g.addVertex('一勺油')
# g.addVertex('一杯松仁粉')
# g.addEdge('A', 'B')
# g.addEdge('A', 'D')
# g.addEdge('B', 'C')
# g.addEdge('B', 'D')
# g.addEdge('D', 'E')
# g.addEdge('E', 'B')
# g.addEdge('E', 'F')
# g.addEdge('F', 'C')
# g.addEdge('开始', '一个鸡蛋')
# g.addEdge('开始', '一勺油')
# g.addEdge('开始', '牛奶')
g.addEdge('一个鸡蛋','一杯松仁粉')
g.addEdge('一勺油', '一杯松仁粉')
g.addEdge('牛奶', '一杯松仁粉')
g.addEdge('一杯松仁粉', '倒入混合物')
g.addEdge('加热平底锅', '倒入混合物')
g.addEdge('倒入混合物', '出现气泡翻面')
g.addEdge('一杯松仁粉', '加热糖浆')
g.addEdge('出现气泡翻面', '开始享用')
g.addEdge('加热糖浆', '开始享用')
#
for node in g:
print(node.getId(),node.discoveryTime,node.finishTime)
print('-'*70)
g.dfs()
lst = []
for node in g:
print(node.getId(),node.discoveryTime,node.finishTime)
lst.append(node)
# # 基于结束时间,将顶点按照递减顺序存储在列表中。
print('-'*70)
for node in lst:
print(node.getId(), node.finishTime)
lst.sort(key=lambda x:-x.finishTime)
for node in lst:
print(node.getId(),end=' ')
# g = DFSGraph()
# for i in range(6):
# g.addVertex(i)
#
#
# g.addEdge(0, 1, 5)
# g.addEdge(0, 5, 2)
# g.addEdge(1, 2, 4)
# g.addEdge(2, 3, 9)
# g.addEdge(3, 4, 7)
# g.addEdge(3, 5, 3)
# g.addEdge(4, 0, 1)
# g.addEdge(5, 4, 8)
# g.addEdge(5, 2, 1)
#
# g.dfs()
输出
一个鸡蛋 0 0
一杯松仁粉 0 0
一勺油 0 0
牛奶 0 0
倒入混合物 0 0
加热平底锅 0 0
出现气泡翻面 0 0
加热糖浆 0 0
开始享用 0 0
----------------------------------------------------------------------
一个鸡蛋 1 12
一杯松仁粉 2 11
一勺油 13 14
牛奶 15 16
倒入混合物 3 8
加热平底锅 17 18
出现气泡翻面 4 7
加热糖浆 9 10
开始享用 5 6
----------------------------------------------------------------------
一个鸡蛋 12
一杯松仁粉 11
一勺油 14
牛奶 16
倒入混合物 8
加热平底锅 18
出现气泡翻面 7
加热糖浆 10
开始享用 6
加热平底锅 牛奶 一勺油 一个鸡蛋 一杯松仁粉 加热糖浆 倒入混合物 出现气泡翻面 开始享用