Python区分广度优先深度优先宽度优先的区别

先说明:广度优先搜索(BFS)就是宽度优先搜索,二者通常没有区别;真正相对的是 深度优先搜索(DFS)。所以严格说只有 DFS 和 BFS 两类。下面写三段代码:DFS、BFS(广度/宽度)、优先队列搜索,方便对比。

```python

from collections import deque

import heapq

graph = {

'A': 'B', 'C',

'B': 'D', 'E',

'C': 'F',

'D': \[\],

'E': 'G',

'F': \[\],

'G': \[\]

}

1. 深度优先 DFS:用递归/栈,一条路走到黑

def dfs(node, visited=None):

if visited is None:

visited = set()

visited.add(node)

print(node, end=' ')

for nxt in graphnode:

if nxt not in visited:

dfs(nxt, visited)

print("DFS 深度优先:")

dfs('A')

print("\n")

输出:A B D E G C F

2. 广度优先 / 宽度优先 BFS:用队列,一层一层访问

def bfs(start):

q = deque(start)

visited = {start}

while q:

node = q.popleft()

print(node, end=' ')

for nxt in graphnode:

if nxt not in visited:

visited.add(nxt)

q.append(nxt)

print("BFS 广度优先 = 宽度优先:")

bfs('A')

print("\n")

输出:A B C D E F G

3. 优先队列搜索:不是按层,也不是一路到底,而是按"优先级"扩展

这里示例:字母越大越优先,用 -ord(x) 当优先级

def best_first(start, priority):

pq = (priority(start), start)

visited = set()

while pq:

_, node = heapq.heappop(pq)

if node in visited:

continue

visited.add(node)

print(node, end=' ')

for nxt in graphnode:

if nxt not in visited:

heapq.heappush(pq, (priority(nxt), nxt))

print("优先队列搜索:")

best_first('A', lambda x: -ord(x))

print()

输出:A C F B E G D

```

对比总结:

算法 数据结构 特点 示例输出

DFS 深度优先 栈 / 递归 一条路走到底,不按层 A B D E G C F

BFS 广度/宽度优先 队列 一层一层访问,无权图可求最短路径 A B C D E F G

优先队列搜索 堆 每次选优先级最高/代价最小的节点 取决于优先级

关键区别:

· 深度优先 DFS:先深入,走不动再回头。

· 广度优先 BFS:也叫宽度优先,先访问离起点近的所有节点,再访问下一层。

· 优先队列搜索:不关心层数,只关心"谁优先级更高",常用于 Dijkstra、A*、最佳优先搜索等。

文章仅供参考用。

相关推荐
Sakura_j_h_18 分钟前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc1232 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi2 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
企业数字化笔记2 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
ZhengEnCi2 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
?abc!3 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
镜子AI4 小时前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft
小oo呆5 小时前
【学习心得】Python协程
python
信誓旦旦的程序猿5 小时前
【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
gCode Teacher 格码致知5 小时前
Pandas教学-21:subplots的使用
python·pandas·1024程序员节