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*、最佳优先搜索等。

文章仅供参考用。

相关推荐
打工仔折腾 AI2 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
如意猴2 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i2 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
旋生万物2 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
专业程序开发源3 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
wuyk5553 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
kaiyou20263 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
weixin_440730503 小时前
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)
python·装饰器
零基础1233 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化