收藏:①极市开发DeepLearning ②Git使用

图的遍历(python)

图的广度和深度遍历代码:(记录)

 1 __author__ = "WSX"
 2 
 3 # 图的宽度遍历和深度遍历
 4 
 5 # 1. BFS
 6 def bfsTravel(graph, source):
 7     # 传入的参数为邻接表存储的图和一个开始遍历的源节点
 8     frontiers = [source]     # 表示前驱节点
 9     travel = [source]       # 表示遍历过的节点
10     # 当前驱节点为空时停止遍历
11     while frontiers:
12         nexts = []          # 当前层的节点(相比frontier是下一层)
13         for frontier in frontiers:
14             for current in graph[frontier]: # 遍历当前层的节点
15                 if current not in travel:   # 判断是否访问过
16                     travel.append(current)  # 没有访问过则入队
17                     nexts.append(current)   # 当前结点作为前驱节点
18         frontiers = nexts   # 更改前驱节点列表
19     return travel
20 
21 
22 def dfsTravel(graph, source):
23     # 传入的参数为邻接表存储的图和一个开始遍历的源节点
24     travel = []     # 存放访问过的节点的列表
25     stack = [source]      # 构造一个堆栈
26     while stack:            # 堆栈空时结束
27         current = stack.pop()       # 堆顶出队
28         if current not in travel:   # 判断当前结点是否被访问过
29             travel.append(current)  # 如果没有访问过,则将其加入访问列表
30         for next_adj in graph[current]: # 遍历当前结点的下一级
31             if next_adj not in travel:  # 没有访问过的全部入栈
32                 stack.append(next_adj)
33     return travel
34 
35 # 啊,
36 if __name__ == "__main__":
37     graph = {}
38     graph['a'] = ['b']
39     graph['b'] = ["a",'c']
40     graph['c'] = ["b"]
41     graph['d'] = ["e"]
42     graph['e'] = ["d"]
43 
44     # test of BFS
45     a = ["a", "b", "c", "e", "d"]
46     print(bfsTravel(graph, 'e'))
47 
48     print(dfsTravel(graph, 'b'))

 

posted @ 2019-08-05 22:11  WSX_1994  阅读(570)  评论(0)    收藏  举报