博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的遍历(Python实现)
阅读量:6933 次
发布时间:2019-06-27

本文共 1479 字,大约阅读时间需要 4 分钟。

图的遍历(Python实现)

记录两种图的遍历算法——广度优先(BFS)与深度优先(DFS)。

图(graph)在物理存储上采用邻接表,而邻接表是用python中的字典来实现的。

两种遍历方式的代码如下所示:

# 图的宽度遍历和深度遍历# 1. BFSdef bfsTravel(graph, source):    # 传入的参数为邻接表存储的图和一个开始遍历的源节点    frontiers = [source]     # 表示前驱节点    travel = [source]       # 表示遍历过的节点    # 当前驱节点为空时停止遍历    while frontiers:                nexts = []          # 当前层的节点(相比frontier是下一层)        for frontier in frontiers:            for current in graph[frontier]: # 遍历当前层的节点                if current not in travel:   # 判断是否访问过                    travel.append(current)  # 没有访问过则入队                    nexts.append(current)   # 当前结点作为前驱节点        frontiers = nexts   # 更改前驱节点列表    return traveldef dfsTravel(graph, source):    # 传入的参数为邻接表存储的图和一个开始遍历的源节点    travel = []     # 存放访问过的节点的列表    stack = [source]      # 构造一个堆栈    while stack:            # 堆栈空时结束            current = stack.pop()       # 堆顶出队        if current not in travel:   # 判断当前结点是否被访问过            travel.append(current)  # 如果没有访问过,则将其加入访问列表        for next_adj in graph[current]: # 遍历当前结点的下一级            if next_adj not in travel:  # 没有访问过的全部入栈                stack.append(next_adj)    return travelif __name__ == "__main__":    graph = {}    graph['a'] = ['b']    graph['b'] = ['c','d']    graph['c'] = ['e']    graph['d'] = []    graph['e'] = ['a']    # test of BFS    print(bfsTravel(graph, 'b'))    print(dfsTravel(graph, 'b'))

运行结果如下:

['b', 'c', 'd', 'e', 'a']

['b', 'd', 'c', 'e', 'a']

 

 

转载于:https://www.cnblogs.com/thisyan/p/9886208.html

你可能感兴趣的文章
ionicView视图的生命周期
查看>>
[K/3Cloud] 单据转换插件执行顺序
查看>>
关于Nginx支持.htaccess的分析
查看>>
Android中线程与进程的理解
查看>>
win 下 nginx 的虚拟主机创建
查看>>
【转载】border:none;与border:0;的区别
查看>>
Hyperledger Fabric -- gossip 协议
查看>>
判断IE版本
查看>>
静态函数造成GC的原因
查看>>
windows phone 使用bing map 服务
查看>>
Elasticsearch索引原理
查看>>
SVM核技巧之终极分析
查看>>
hdu2089 不要62 数位DP
查看>>
GetSchema取得数据库架构,无法取得列的Description属性的解决方法
查看>>
jQuery链式操作
查看>>
课本235页2-3题
查看>>
Windows CMD命令大全
查看>>
我的天哪,,我我, 我, 我,进入了恐慌季,我到转折点了吗?
查看>>
UVA1665 Islands (并查集)
查看>>
织梦网站底部的Power by DedeCms怎么去掉?
查看>>