给出一个迪杰斯特拉算法的代码
时间: 2023-12-14 22:04:03 浏览: 62
好的,以下是一个简单的迪杰斯特拉算法的Python实现:
```python
import sys
# 定义一个函数,用于从未处理的顶点中找到距离最短的顶点
def get_min_distance(distance, processed):
min_distance = sys.maxsize
min_vertex = None
for vertex in range(len(distance)):
# 如果该顶点未处理过并且距离比当前最小距离小,则更新最小距离和最小顶点
if not processed[vertex] and distance[vertex] < min_distance:
min_distance = distance[vertex]
min_vertex = vertex
return min_vertex
# 定义一个函数,用于计算从起点到各顶点的最短路径
def dijkstra(graph, start):
# 初始化距离数组和处理状态数组
distance = [sys.maxsize] * len(graph)
processed = [False] * len(graph)
# 起点到自己的距离为0
distance[start] = 0
# 处理所有顶点
for _ in range(len(graph)):
# 找到距离最短且未处理的顶点
curr_vertex = get_min_distance(distance, processed)
# 将该顶点标记为已处理
processed[curr_vertex] = True
# 更新与该顶点相邻的顶点的距离
for neighbor_vertex, weight in graph[curr_vertex]:
# 如果该顶点未处理过并且通过当前顶点可以得到更短的距离,则更新距离数组
if not processed[neighbor_vertex] and distance[curr_vertex] + weight < distance[neighbor_vertex]:
distance[neighbor_vertex] = distance[curr_vertex] + weight
return distance
```
上述代码中,`graph`是一个邻接表,用于存储图的信息。每个元素表示一个顶点及其相邻的顶点和边的权重,例如`graph[0]`表示第一个顶点及其相邻的顶点和边的权重,格式为`[(1, 3), (2, 4)]`,表示第一个顶点相邻的顶点为1和2,对应的边的权重分别为3和4。`start`表示起点。函数返回一个包含从起点到各顶点的最短路径的数组。
阅读全文