用python 写一个根据邻接矩阵算最短路径
时间: 2023-07-04 20:13:39 浏览: 87
python矩阵/字典实现最短路径算法
好的,下面是一个使用 Dijkstra 算法根据邻接矩阵算最短路径的 Python 代码:
```python
import sys
def dijkstra(graph, start, end):
"""
Dijkstra算法求最短路径
:param graph: 邻接矩阵
:param start: 起点
:param end: 终点
:return: 起点到终点的最短路径及其长度
"""
n = len(graph) # 图的大小
visited = [False] * n # 记录节点是否已经访问过
distance = [sys.maxsize] * n # 记录起点到各个节点的最短距离
path = [-1] * n # 记录路径
distance[start] = 0 # 起点到自己的距离为0
for i in range(n):
min_distance = sys.maxsize
min_index = -1
# 找到当前未访问过的节点中距离起点最近的节点
for j in range(n):
if not visited[j] and distance[j] < min_distance:
min_distance = distance[j]
min_index = j
if min_index == -1:
break
visited[min_index] = True # 标记当前节点已经访问过
# 更新起点到周围节点的最短距离
for k in range(n):
if not visited[k] and graph[min_index][k] != 0 and distance[min_index] + graph[min_index][k] < distance[k]:
distance[k] = distance[min_index] + graph[min_index][k]
path[k] = min_index
# 打印起点到终点的最短路径
shortest_path = []
current = end
while current != start:
shortest_path.append(current)
current = path[current]
shortest_path.append(start)
shortest_path.reverse()
return shortest_path, distance[end]
```
其中,`graph` 是邻接矩阵,`start` 是起点,`end` 是终点。函数返回一个元组,第一个元素是起点到终点的最短路径,第二个元素是最短路径的长度。
需要注意的是,邻接矩阵中的 0 表示两个节点之间没有边,sys.maxsize 表示两个节点之间的距离无限大(即不可达)。
阅读全文