编写一个程序,要求找出给定无向图从A点到其他所有点的最短路径。要求输出A到各个点的最短路径的距离,格式如“A->A的最短路径为:A 长度:0”。的python思路
时间: 2024-02-18 10:01:44 浏览: 54
好的,同样是使用Dijkstra算法。以下是一个简单的Python实现:
```python
import heapq
INF = 0x3f3f3f3f
n, m, s = map(int, input().split()) # n表示节点数,m表示边数,s表示起点
adj = [[] for i in range(n+1)] # 存储邻接表
dis = [INF] * (n+1) # 记录每个点到起点的最短距离
vis = [False] * (n+1) # 标记每个点是否已经被访问过
def dijkstra(s):
dis[s] = 0 # 起点到起点的距离为0
pq = [(0, s)] # 将起点加入到优先队列中
while pq:
d, u = heapq.heappop(pq)
if vis[u]: continue # 如果当前节点已经被访问过,则跳过
vis[u] = True # 将当前节点标记为已访问
for v, w in adj[u]:
if dis[v] > dis[u] + w: # 如果从起点到v的距离比从起点到u再到v的距离更短,则更新dis[v]
dis[v] = dis[u] + w
heapq.heappush(pq, (dis[v], v)) # 将v加入到优先队列中
for i in range(m):
u, v, w = map(int, input().split())
adj[u].append((v, w))
adj[v].append((u, w))
dijkstra(s)
for i in range(1, n+1):
print("{}->{}的最短路径为:{} 长度:{}".format(s, i, i, dis[i]))
```
这个程序的时间复杂度也是O(mlogn)。
阅读全文