邻接矩阵存储图的广度优先遍历
时间: 2025-01-23 16:17:42 浏览: 40
### 使用邻接矩阵存储图并进行广度优先遍历
#### 广度优先遍历简介
宽度优先遍历(Breadth-First Search, BFS)是一种用于图论和树论中的基本查找搜索算法,广泛应用于各种图算法中作为基础工具[^1]。
#### 邻接矩阵表示法
对于一个具有 \( n \) 个顶点的无向图或有向图,可以使用大小为 \( n \times n \) 的二维数组来表示该图。如果存在一条从顶点 \( i \) 到顶点 \( j \) 的边,则设置 `matrix[i][j]=1`;否则设为0。这种表示方法称为邻接矩阵。
#### 实现广度优先遍历
为了执行基于邻接矩阵的广度优先遍历,通常会采用队列数据结构辅助操作:
```python
from collections import deque
def bfs_adj_matrix(matrix, start_vertex):
visited = set() # 记录已访问节点集合
queue = deque([start_vertex]) # 初始化队列并将起始顶点加入其中
while queue:
vertex = queue.popleft()
if vertex not in visited:
print(f'Visiting {vertex}') # 处理当前顶点的操作
visited.add(vertex)
for neighbor_index, edge_value in enumerate(matrix[vertex]):
if edge_value and (neighbor_index not in visited):
queue.append(neighbor_index)
# 示例用法
if __name__ == "__main__":
adj_matrix_example = [
[0, 1, 0, 0],
[1, 0, 1, 1],
[0, 1, 0, 0],
[0, 1, 0, 0]
]
bfs_adj_matrix(adj_matrix_example, 0)
```
上述代码展示了如何利用Python内置模块collections.deque创建双端队列来进行高效的入队/出队操作,并通过循环迭代完成整个过程直到所有可达顶点都被处理完毕[^2]。
阅读全文
相关推荐
















