给定一个正权有向图,图中包含n个顶点,编号为0至n-1。以顶点0作为源点,请编写程序
时间: 2023-12-29 19:01:08 浏览: 193
编写算法,由依次输入的顶点数目、弧的数目、各顶点信息和各条弧信息建立有向图的邻接表。
4星 · 用户满意度95%
以下是用Python编写的一个示例程序,它使用Dijkstra算法找到以顶点0作为源点的最短路径:
```python
import heapq
def dijkstra(graph, n):
dist = [float('inf')] * n
dist[0] = 0
heap = [(0, 0)]
while heap:
d, node = heapq.heappop(heap)
if d > dist[node]:
continue
for neighbor, weight in graph[node]:
new_dist = dist[node] + weight
if new_dist < dist[neighbor]:
dist[neighbor] = new_dist
heapq.heappush(heap, (new_dist, neighbor))
return dist
# 示例图的邻接表表示
graph = [
[(1, 5), (2, 3)], # 顶点0的邻居节点及权重
[(2, 2), (3, 6)], # 顶点1的邻居节点及权重
[(3, 7)], # 顶点2的邻居节点及权重
[(4, 4)], # 顶点3的邻居节点及权重
[(1, 2)] # 顶点4的邻居节点及权重
]
n = len(graph)
distances = dijkstra(graph, n)
print("以顶点0作为源点的最短路径为:")
for i, distance in enumerate(distances):
print("到顶点{}的最短距离为:{}".format(i, distance))
```
该程序首先定义了一个`dijkstra`函数,它接受一个邻接表表示的有向图和顶点数量作为参数,然后使用Dijkstra算法计算从源点0到其他顶点的最短距离。然后,在示例图的示例邻接表表示中,调用`dijkstra`函数并打印结果。
阅读全文