帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )
发布时间:2024-03-03 02:28:45   分类:帮助文档
Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )






Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )
引言 1. 深度优先搜索( DFS )算法概述2. 深度优先搜索( DFS )算法实现实例1:图的 DFS 遍历实例2:二叉树的 DFS 遍历
3. 广度优先搜索( BFS )算法概述4. 广度优先搜索( BFS )算法实现实例1:图的 BFS 遍历实例2:二叉树的 BFS 遍历
5. DFS 与 BFS 的对比总结


引言
深度优先搜索( DFS )和广度优先搜索( BFS )是两种常用的图遍历算法,用于在图中搜索目标节点或遍历图的所有节点。本篇博客将介绍 DFS 和 BFS 算法的基本概念,并通过实例代码演示它们的应用。
😃😄 ❤️ ❤️ ❤️
1. 深度优先搜索( DFS )算法概述
深度优先搜索( DFS )是一种用于遍历或搜索图或树的算法,它从起始节点开始,沿着一条路径一直深入直到无法继续为止,然后回溯到上一个节点继续探索。 DFS 使用栈来记录遍历的路径,它优先访问最近添加到栈的节点。
DFS 的主要优点是简单且易于实现,它不需要额外的数据结构来记录节点的访问情况,仅使用栈来存储遍历路径。然而, DFS 可能会陷入无限循环中,因为它不考虑节点是否已经访问过。
2. 深度优先搜索( DFS )算法实现
实例1:图的 DFS 遍历
# 图的DFS遍历
def dfs(graph, start, visited):
# 访问当前节点
print(start, end=' ')
# 标记当前节点为已访问
visited[start] = True
# 遍历当前节点的邻居节点
for neighbor in graph[start]:
# 如果邻居节点未被访问,则继续深度优先搜索
if not visited[neighbor]:
dfs(graph, neighbor, visited)

# 图的邻接表表示
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C']
}

# 标记节点是否已访问的列表
visited = {node: False for node in graph}

# 从节点A开始进行DFS遍历
print("DFS遍历结果:")
dfs(graph, 'A', visited)

代码解释:上述代码演示了使用 DFS 算法遍历图的实例。我们使用邻接表表示图,然后从节点 A 开始进行 DFS 遍历。 DFS 算法通过递归的方式深入遍历每个节点,并使用 visited 字典记录节点是否已经访问过,防止重复访问。
实例2:二叉树的 DFS 遍历
# 二叉树节点定义
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None

# 二叉树的DFS遍历
def dfs_binary_tree(root):
if root is None:
return
print(root.val, end=' ')
dfs_binary_tree(root.left)
dfs_binary_tree(root.right)

# 构造二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 二叉树的DFS遍历
print("二叉树的DFS遍历结果:")
dfs_binary_tree(root)

代码解释:上述代码演示了使用 DFS 算法遍历二叉树的实例。我们构造了一个二叉树,并使用递归的方式进行 DFS 遍历。 DFS 算法沿着左子树一直深入到底,然后再回溯遍历右子树。
3. 广度优先搜索( BFS )算法概述
广度优先搜索( BFS )是一种用于遍历或搜索图或树的算法,它从起始节点开始,逐层地向外扩展,先访问当前节点的所有邻居节点,然后再访问邻居节点的邻居节点,直到遍历完所有节点。
BFS 使用队列来记录遍历的路径,它优先访问最早添加到队列的节点。 BFS 的主要优点是能够找到起始节点到目标节点的最短路径,因为它是逐层遍历的。
4. 广度优先搜索( BFS )算法实现
实例1:图的 BFS 遍历
from collections import deque

# 图的BFS遍历
def bfs(graph, start):
# 使用队列来记录遍历路径
queue = deque([start])
# 标记节点是否已访问的集合
visited = set([start])

while queue:
node = queue.popleft()
print(node, end=' ')

for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)

# 图的邻接表表示
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F', 'G'],
'D': ['B'],
'E': ['B'],
'F': ['C'],
'G': ['C']
}

# 从节点A开始进行BFS遍历
print("BFS遍历结果:")
bfs(graph, 'A')

代码解释:上述代码演示了使用 BFS 算法遍历图的实例。我们使用邻接表表示图,然后从节点 A 开始进行 BFS 遍历。 BFS 算法通过使用队列来逐层遍历图的节点,并使用 visited 集合记录节点是否已经访问过,防止重复访问。
实例2:二叉树的 BFS 遍历
from collections import deque

# 二叉树节点定义
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None

# 二叉树的BFS遍历
def bfs_binary_tree(root):
if root is None:
return

queue = deque([root])
while queue:
node = queue.popleft()
print(node.val, end=' ')
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)

# 构造二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 二叉树的BFS遍历
print("二叉树的BFS遍历结果:")
bfs_binary_tree(root)

代码解释:上述代码演示了使用 BFS 算法遍历二叉树的实例。我们构造了一个二叉树,并使用队列来逐层遍历二叉树的节点。 BFS 算法先访问根节点,然后依次将左子节点和右子节点添加到队列中,再逐层遍历子树。
5. DFS 与 BFS 的对比
DFS 和 BFS 是两种不同的图遍历算法,在不同的应用场景下具有不同的优势:
DFS 适用于找到起始节点到目标节点的路径,但不一定是最短路径。它通过递归的方式深入探索图的分支,因此对于深度较小的图或树, DFS 通常表现较好。 BFS 适用于找到起始节点到目标节点的最短路径。它通过逐层遍历图的节点,从而保证找到的路径是最短的。在需要寻找最短路径的情况下, BFS 是更好的选择。
总结
本篇博客介绍了深度优先搜索( DFS )和广度优先搜索( BFS )算法的基本概念,并通过实例代码演示了它们在图和二叉树遍历中的应用。
DFS 是一种深入探索图或树的算法,通过递归方式遍历每个节点,优先访问最近添加到栈的节点。 BFS 是一种逐层遍历图或树的算法,通过队列来存储遍历路径,优先访问最早添加到队列的节点。
[ 专栏推荐 ] 😃 《Python 算法初阶:入门篇》😄 ❤️【简介】:本课程是针对 Python 初学者设计的算法基础入门课程,涵盖算法概念、时间复杂度、空间复杂度等基础知识。通过实例演示线性搜索、二分搜索等算法,并介绍哈希表、深度优先搜索、广度优先搜索等搜索算法。此课程将为学员提供扎实的 Python 编程基础与算法入门,为解决实际问题打下坚实基础。





香港云服务器租用推荐
服务器租用资讯
·租用美国服务器配置
·怎样使用美国服务器(新的服务器怎样使用)
·怎么联系美国服务器(本服务器在美国受到法律)
·云服务器美国电影(美国高防云服务器)
·源服务器在美国(美国服务器ip)
·邮箱搭建美国服务器(群晖搭建邮箱服务器)
·微信美国服务器(微信小程序要服务器吗)
·受美国服务器保护(此服务器受美国保护)
·手机vpn美国服务器
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价