基于邻接矩阵实现图的广度优先遍历(数据结构
时间: 2024-03-18 12:17:56 浏览: 67
邻接矩阵是一种表示图的方式,它用二维数组来表示节点之间的连接关系。具体来说,如果图中有 $n$ 个节点,那么邻接矩阵就是一个 $n \times n$ 的矩阵,其中第 $i$ 行第 $j$ 列的元素表示从节点 $i$ 到节点 $j$ 是否有边相连。
广度优先遍历是一种图的遍历方式,它从图中的某个节点开始,依次访问与该节点相邻的所有节点,然后再依次访问这些相邻节点的相邻节点,直到遍历完整个图。
下面是基于邻接矩阵实现图的广度优先遍历的代码:
```python
from queue import Queue
def bfs(adj_matrix, start):
n = len(adj_matrix)
visited = [False] * n
queue = Queue()
visited[start] = True
queue.put(start)
while not queue.empty():
node = queue.get()
print(node, end=' ')
for i in range(n):
if adj_matrix[node][i] and not visited[i]:
visited[i] = True
queue.put(i)
```
其中,`adj_matrix` 是邻接矩阵,`start` 是起始节点的编号。首先创建一个长度为 $n$ 的布尔数组 `visited` 表示每个节点是否被访问过,初始时所有节点都未被访问过。然后创建一个队列 `queue`,将起始节点放入队列中,并将 `visited[start]` 设为 `True`。接下来进入循环,每次从队列中取出一个节点 `node`,访问它,并将与它相邻的未被访问过的节点放入队列中。具体来说,对于每个节点 $i$,如果从节点 $node$ 到节点 $i$ 有边相连且节点 $i$ 未被访问过,则将 `visited[i]` 设为 `True`,并将节点 $i$ 放入队列中。直到队列为空,遍历结束。
注意,上述代码中使用了 Python 中的队列类 `queue.Queue`,如果使用其他编程语言,需要自己实现队列。另外,如果图不是连通的,即存在多个连通分量,那么需要对每个连通分量都进行广度优先遍历。
阅读全文