python实现BFS(广度优先搜索)& DFS(深度优先搜索)

本文介绍了Python中实现BFS(广度优先搜索)和DFS(深度优先搜索)的方法,通过实例展示了搜索过程,并提供了从节点A出发的两种搜索策略的结果。BFS利用队列进行搜索,而DFS则采用栈。同时,文章还讨论了如何解决最短路径问题,通过parent表记录每个节点的前驱节点来找到A到E的最短路径。
摘要由CSDN通过智能技术生成
  • BFS(广度优先搜索):

图1 BFS
图2 BFS
图3 Queue of BFS

图一是BFS(广度优先搜索)在树的情况下的执行过程,从A出发,搜索A的第二层,发现有B,C,D(必须从左到右搜索),再搜索B的第二层,发现B的第二层没有元素,再搜索C的第二层,发现有E,F,放置于D后面,再搜索D的第二层,发现有G,放置于F后面,再往下搜索E,F,G,发现只有G有第二层H和I,所以最后得到:
A B C D E F G H I
图二是BFS(广度优先搜索)在图的情况下的执行过程,假设从A出发,第二层是B和C,先搜索B的第二层,发现有D,再搜索C的第二层,发现只有E了,最后D,E中只有D有第二层F,所以最后得到:
A B C D E F
⚠️:这里不可以是:A B C E D F,因为必须先搜索B的第二层再搜索C的第二层
同理以E为起始点可以得到:E C D A B F(不同的起始点的路径不同)
BFS在python中实现运用了Queue(队列)将搜索结果进行排列

  • DFS(深度优先搜索):

图4 DFS
图5 stack of DFS

图4是DFS(深度优先搜索)在图的情况下的执行过程,其规则是从起始点往下走,走到底再返回,直到走完所有点:
从起始点A出发->B->C->D->F(此时到底了,返回)->E->C(此时所有点都走完了)
DFS在python中实现运用了Stack(栈)将搜索结果进行堆砌:
将起始点A先放入栈->拿出A,A后可以选择走B和C->将B,C放入栈->拿出B,B之后只能走D->将D放入栈->拿出D,D之后可以走E,F->将E,F放入栈->拿出F,F之后到底了->无放入->拿出E->拿出C
最后得到 A B D F E C不同的起始点的路径不同

完整python代码解析
从‘A’出发:
BFS得到A B C D E F (答案不唯一)
DFS得到A B D F E C (答案不唯一)

用字典的映射去表示图2
>>> graph = {
   
...     'A': ['B', 'C'],
...     'B': ['A', 'C', 'D'],
...     'C': ['A', 'B', 'D', 'E'],
...     'D': 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值