使用python实现BFS无向图,具体到输出每一步访问的结点
时间: 2024-10-14 13:04:55 浏览: 18
在Python中,通过`deque`(双端队列)实现BFS并打印每次访问的节点,可以按照以下步骤进行:
首先,我们创建一个简单的图类,包含节点和邻接列表:
```python
from collections import deque
class Node:
def __init__(self, value):
self.value = value
self.neighbors = []
class Graph:
def __init__(self):
self.nodes = {}
def add_node(self, value):
new_node = Node(value)
self.nodes[value] = new_node
```
然后,我们需要添加节点和边,并编写BFS函数:
```python
def add_edge(self, node1, node2):
self.nodes[node1].neighbors.append(self.nodes[node2])
self.nodes[node2].neighbors.append(self.nodes[node1]) # 无向图,添加双向边
def bfs(self, start_node):
visited = {start_node} # 已访问节点集合
queue = deque([start_node]) # 开始节点放入队列
while queue:
current_node = queue.popleft() # 弹出队首节点
print(current_node.value, end=" ") # 打印节点值
for neighbor in self.nodes[current_node].neighbors:
if neighbor not in visited:
visited.add(neighbor) # 更新已访问节点
queue.append(neighbor) # 新节点入队
# 示例:
g = Graph()
g.add_node('A')
g.add_node('B')
g.add_node('C')
g.add_node('D')
g.add_edge('A', 'B')
g.add_edge('B', 'C')
g.add_edge('C', 'D')
g.bfs('A') # 从'A'开始BFS
```
运行这段代码,会输出BFS过程中每个节点的访问顺序。
阅读全文