python算法模板dfs和bfs
时间: 2023-08-24 09:03:56 浏览: 127
好的,以下是 Python 中 DFS 和 BFS 的代码模板。
DFS 模板:
```python
def dfs(node, visited, graph):
# 判断当前节点是否已经访问过
if visited[node]:
return
# 标记当前节点为已访问
visited[node] = True
# 处理当前节点
process(node)
# 遍历当前节点的邻居节点
for neighbor in graph[node]:
# 递归访问邻居节点
dfs(neighbor, visited, graph)
```
BFS 模板:
```python
from collections import deque
def bfs(start, graph):
# 创建队列,并将起始节点入队
queue = deque([start])
# 创建 visited 数组,用于标记每个节点是否访问过
visited = [False] * (len(graph) + 1)
# 标记起始节点为已访问
visited[start] = True
# 队列不为空时循环
while queue:
# 取出队头节点
node = queue.popleft()
# 处理当前节点
process(node)
# 遍历当前节点的邻居节点
for neighbor in graph[node]:
# 如果邻居节点未被访问过,则将其入队并标记为已访问
if not visited[neighbor]:
queue.append(neighbor)
visited[neighbor] = True
```
其中,DFS 和 BFS 的输入参数都是一个图和起始节点。对于 DFS,使用一个 visited 数组记录每个节点是否访问过,在访问节点时递归访问其邻居节点,直到所有连通节点都被访问过为止。对于 BFS,使用一个队列来存储待访问的节点,在访问节点时先处理当前节点,再将其邻居节点加入队列中,并标记为已访问,直到队列为空为止。
阅读全文