无向图采用邻接矩阵进行存储,完成以下操作 (1) 建立无向图的邻接矩阵存储 (2) 输出邻接矩阵 (3) 基于图邻接矩阵的深度优先遍历 (4) 基于图邻接矩阵的广度优先遍历
时间: 2024-06-23 10:02:14 浏览: 126
无向图的建立和邻接矩阵的输出
5星 · 资源好评率100%
无向图使用邻接矩阵存储时,它是一个二维数组,其中的行和列分别代表图中的顶点,矩阵的元素表示对应顶点之间的连接关系。如果两个顶点之间存在边,则对应位置的值为1或true;若不存在,则为0或false。
(1) **建立无向图的邻接矩阵存储**:
假设我们有一个无向图G,其顶点集合是V={v1, v2, ..., vn}。邻接矩阵A是一个n×n的矩阵,A[i][j]表示顶点vi到vj是否有边。初始时,所有元素都设为0,然后根据实际的边来填充:
```
A = [
[0, 0, ..., 0],
[0, 0, ..., 0],
...,
[0, 0, ..., 0]
]
```
每添加一条边(vi, vj),将A[i][j]和A[j][i](因为无向图,边是双向的)置为1。
(2) **输出邻接矩阵**:
遍历并打印矩阵A,例如:
```plaintext
for i in range(n):
for j in range(n):
if A[i][j]:
print(f'({i+1}, {j+1}): 1', end='\t')
print()
```
(3) **基于图邻接矩阵的深度优先遍历(DFS)**:
DFS可以从任意顶点开始,利用栈数据结构实现:
```python
def DFS(matrix, start, visited=None):
if visited is None:
visited = [False] * n
visited[start] = True
print(start + 1, end=' ')
for neighbor in range(n):
if matrix[start][neighbor] and not visited[neighbor]:
DFS(matrix, neighbor, visited)
```
(4) **基于图邻接矩阵的广度优先遍历(BFS)**:
BFS使用队列,从起始顶点开始逐层遍历:
```python
from collections import deque
def BFS(matrix, start):
visited = [False] * n
queue = deque([start])
visited[start] = True
while queue:
vertex = queue.popleft()
print(vertex + 1, end=' ')
for neighbor in range(n):
if matrix[vertex][neighbor] and not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
```
阅读全文