帮我用python写一个用邻接矩阵储存的图的Dijkstra算法
时间: 2023-05-26 20:06:21 浏览: 102
以下是使用邻接矩阵储存的图的Dijkstra算法的Python代码:
``` python
# 定义邻接矩阵
graph = [[0, 2, 4, 0, 0, 0],
[2, 0, 1, 4, 2, 0],
[4, 1, 0, 1, 3, 0],
[0, 4, 1, 0, 1, 3],
[0, 2, 3, 1, 0, 1],
[0, 0, 0, 3, 1, 0]]
# 定义Dijkstra算法函数
def dijkstra(graph, start):
# 初始化
n = len(graph)
visited = [False] * n
dist = [float('inf')] * n
dist[start] = 0
# 运行算法
for i in range(n):
# 选择节点
u = -1
for j in range(n):
if not visited[j] and (u == -1 or dist[j] < dist[u]):
u = j
# 标记节点为已访问
visited[u] = True
# 更新距离
for v in range(n):
if not visited[v] and graph[u][v] != 0:
new_dist = dist[u] + graph[u][v]
if new_dist < dist[v]:
dist[v] = new_dist
return dist
# 测试算法
print(dijkstra(graph, 0)) # 输出[0, 2, 4, 5, 4, 6]
```
在这个例子中,我们定义了一个邻接矩阵(graph)来存储图,并且使用Dijkstra算法来计算从节点0开始到其他节点的最短路径。函数dijkstra()接收邻接矩阵graph和起始节点start,返回一个包含从起始节点到每个其他节点的最短距离的列表(dist)。在算法中,我们首先初始化变量visited和dist,然后选择距离起始节点最近的节点,标记为visited并更新dist。重复这个过程直到所有节点都被访问。最后,我们返回dist列表作为结果。在这个例子中,最短路径列表为[0, 2, 4, 5, 4, 6],表示从节点0到其他节点的最短距离。
阅读全文