用图编写程序实现深度优先搜索和广度优先搜索算法
时间: 2024-05-13 18:16:48 浏览: 98
图的深度和广度优先搜索算法程序框架.doc
下面是 Python 代码实现深度优先搜索和广度优先搜索算法:
深度优先搜索算法:
```python
def dfs(graph, start):
visited = set() # 用集合保存已经访问过的节点
stack = [start] # 用栈保存待访问的节点
while stack:
node = stack.pop() # 弹出栈顶节点
if node not in visited: # 如果该节点还没有被访问过
visited.add(node) # 将该节点加入已访问节点集合中
stack.extend(graph[node] - visited) # 将该节点的未访问邻居节点入栈
return visited
```
广度优先搜索算法:
```python
from collections import deque
def bfs(graph, start):
visited = set() # 用集合保存已经访问过的节点
queue = deque([start]) # 用队列保存待访问的节点
while queue:
node = queue.popleft() # 弹出队头节点
if node not in visited: # 如果该节点还没有被访问过
visited.add(node) # 将该节点加入已访问节点集合中
queue.extend(graph[node] - visited) # 将该节点的未访问邻居节点入队
return visited
```
其中,`graph` 参数是一个字典,表示图的邻接关系,例如:
```python
graph = {
"A": {"B", "C"},
"B": {"A", "D", "E"},
"C": {"A", "F"},
"D": {"B"},
"E": {"B", "F"},
"F": {"C", "E"}
}
```
上述代码中,我们使用了 Python 标准库中的集合(set)和双向队列(deque)来实现深度优先搜索和广度优先搜索算法。
阅读全文