python 遍历_python实现图广度优先遍历、深度优先遍历

一、广度优先遍历-BFS

顾名思义,BFS总是先访问完同一层的结点,然后才继续访问下一层结点,它最有用的性质是可以遍历一次就生成中心结点到所遍历结点的最短路径,这一点在求无权图的最短路径时非常有用。广度优先遍历的核心思想非常简单,用python实现起来也就十来行代码。下面就是超精简的实现,用来理解核心思想足够了:

1 importqueue2

3 defbfs(adj, start):4 visited =set()5 q =queue.Queue()6 q.put(start) #把起始点放入队列7 while notq.empty():8 u =q.get()9 print(u)10 for v inadj.get(u, []):11 if v not invisited:12 visited.add(v)13 q.put(v)14

15

16 graph = {1: [4, 2], 2: [3, 4], 3: [4], 4: [5]}17 bfs(graph, 1)

1554973-20190920133549189-516930954.png

上面的代码:

1. 创建一个队列,遍历的起始点放入队列

2. 从队列中取出一个元素,打印它,并将其未访问过的子结点放到队列中

3. 重复2,直至队列空

时间复杂度:基本与图的规模成线性关系了,比起图的其它算法动不动就O(n^2)的复杂度它算是相当良心了

空间复杂度:我们看到程序中使用了一个队列,这个队列会在保存一层的结点࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值