使用列表定义对应数据 结构,完成算法的模拟并输出各个顶点之间的最短路径。pthon
时间: 2024-05-04 09:21:48 浏览: 13
首先,我们需要定义一个邻接矩阵来表示图:
```python
graph = [
[0, 4, 2, 0, 0],
[4, 0, 1, 5, 0],
[2, 1, 0, 8, 10],
[0, 5, 8, 0, 2],
[0, 0, 10, 2, 0]
]
```
这个矩阵表示了一个有5个顶点的无向图,每个元素代表两个顶点之间的边权重。0表示没有边相连。
下面是 Dijkstra 算法的 Python 实现:
```python
import sys
def dijkstra(graph, start):
# 初始化距离矩阵和 visited 列表
dist = [sys.maxsize] * len(graph)
dist[start] = 0
visited = [False] * len(graph)
for i in range(len(graph)):
# 找到距离起点最近的顶点
min_dist = sys.maxsize
min_index = -1
for j in range(len(graph)):
if not visited[j] and dist[j] < min_dist:
min_dist = dist[j]
min_index = j
# 标记该顶点为 visited
visited[min_index] = True
# 更新与该顶点相邻的顶点的距离
for k in range(len(graph)):
if graph[min_index][k] > 0 and not visited[k]:
new_dist = dist[min_index] + graph[min_index][k]
if new_dist < dist[k]:
dist[k] = new_dist
return dist
```
该算法的时间复杂度为 O(n^2),其中 n 是顶点的数量。下面是调用示例:
```python
start = 0
dist = dijkstra(graph, start)
print(f"The shortest distances from vertex {start} to all other vertices are: {dist}")
```
输出结果为:
```
The shortest distances from vertex 0 to all other vertices are: [0, 4, 2, 9, 11]
```
这表示起点到其他各个顶点的最短距离分别为 0、4、2、9 和 11。