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

本文共 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

你可能感兴趣的文章
【244】◀▶IEW-Unit09
查看>>
Unity5.1 新的网络引擎UNET(十五) Networking 引用--中
查看>>
用任务计划管理计划任务对付任务计划-禁止WPS提示升级
查看>>
Android——SlidingMenu学习总结
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
UI概念体系要素
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
performSelectorInBackground V.S detachNewThreadSelector?
查看>>
linux,Centos,bash: service: command not found
查看>>
【转】UIColor对颜色的自定义
查看>>
php编译报错 configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-...
查看>>
asp.net后台进程做定时任务
查看>>
Ural_1671. Anansi's Cobweb(并查集)
查看>>
给vs2012换肤
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
查看>>
Java Web之Filter
查看>>
HTTP状态码详解
查看>>