python实现矩阵Dijkstra有向图算法代码
时间: 2023-07-26 13:47:06 浏览: 87
下面是Python实现矩阵Dijkstra有向图算法的代码:
```python
import sys
def dijkstra(graph, src):
"""
矩阵Dijkstra有向图算法
:param graph: 有向图
:param src: 源节点
:return: 距离列表
"""
n = len(graph)
dist = [sys.maxsize] * n # 起点到各个节点的距离列表
visited = [False] * n # 节点是否已访问的标记
dist[src] = 0 # 起点到起点的距离为0
for _ in range(n):
u = min_distance(dist, visited) # 未访问节点中距离最短的节点
visited[u] = True # 标记为已访问
# 更新未访问节点的距离
for v in range(n):
if graph[u][v] > 0 and not visited[v] and dist[v] > dist[u] + graph[u][v]:
dist[v] = dist[u] + graph[u][v]
return dist
def min_distance(dist, visited):
"""
从未访问节点中选择距离最短的节点
:param dist: 距离列表
:param visited: 是否已访问的标记
:return: 距离最短的节点
"""
min_dist = sys.maxsize
min_index = -1
for v in range(len(dist)):
if not visited[v] and dist[v] < min_dist:
min_dist = dist[v]
min_index = v
return min_index
```
其中,`graph`参数是一个二维矩阵,表示有向图的邻接矩阵,`src`参数是源节点的下标。函数返回的是距离列表,列表中的第`i`个元素表示从源节点到第`i`个节点的最短距离。
阅读全文