邻接矩阵存储方式的无向图
时间: 2023-11-21 14:58:32 浏览: 85
邻接矩阵是一种常见的图的存储方式,其中矩阵的行和列分别表示图中的顶点,矩阵中的元素表示两个顶点之间是否有边相连。对于无向图而言,邻接矩阵是一个对称矩阵,因为如果顶点i与顶点j相连,那么顶点j也一定与顶点i相连。
下面是一个使用邻接矩阵存储方式的无向图的例子:
假设有如下无向图:
```
1 -- 2
| |
3 -- 4
```
使用邻接矩阵存储方式,可以得到如下矩阵:
```
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
```
其中,矩阵中的第i行第j列的元素为1表示顶点i和顶点j之间有边相连,为0表示没有边相连。
求每个顶点的度可以通过遍历邻接矩阵中每一行的元素来实现,每一行中元素值为1的个数即为该顶点的度。
图的广度优先遍历和深度优先遍历是两种常见的图遍历方式。广度优先遍历从图的某个顶点开始,依次访问该顶点的所有邻接点,然后再依次访问这些邻接点的邻接点,以此类推,直到遍历完所有可达的顶点。深度优先遍历则是从图的某个顶点开始,访问该顶点的一个邻接点,然后再访问这个邻接点的一个邻接点,以此类推,直到到达一个没有未访问过的邻接点的顶点,然后回溯到前一个顶点,继续访问它的其他未访问过的邻接点,以此类推,直到遍历完所有可达的顶点。
下面是使用邻接矩阵存储方式实现无向图的存储、求每个顶点的度、广度优先遍历和深度优先遍历的Python代码:
```python
# 定义邻接矩阵
graph = [[0, 1, 1, 1],
[1, 0, 1, 1],
[1, 1, 0, 1],
[1, 1, 1, 0]]
# 求每个顶点的度
for i in range(len(graph)):
degree = sum(graph[i])
print("顶点{}的度为{}".format(i+1, degree))
# 广度优先遍历
def bfs(graph, start):
visited = [False] * len(graph)
queue = [start]
visited[start] = True
while queue:
vertex = queue.pop(0)
print(vertex+1, end=" ")
for i in range(len(graph)):
if graph[vertex][i] == 1 and not visited[i]:
queue.append(i)
visited[i] = True
print("广度优先遍历结果为:")
bfs(graph, 0)
print()
# 深度优先遍历
def dfs(graph, start, visited):
visited[start] = True
print(start+1, end=" ")
for i in range(len(graph)):
if graph[start][i] == 1 and not visited[i]:
dfs(graph, i, visited)
print("深度优先遍历结果为:")
visited = [False] * len(graph)
dfs(graph, 0, visited)
print()
```
阅读全文