输入有向图的相关信息,使用Dijkstra算法,求源点到其余顶点的最短路径长度。 注意: (1)使用邻接矩阵存储图的信息 (2)按路径长度递增的次序产生最短路径并输出 若源点到某顶点无路径,则放在最后输出。如:0到1无路径。 输入说明: 第一行输入有向图的顶点数、边数 第二行输入各顶点的值 接下来的若干行,输入各边的信息。输入格式:起始顶点 终止顶点 权值 最后输入源点的值 输出说明: 输出源点到其余顶点的最短路径长度(其中的冒号为中文全角标点符号)
时间: 2024-03-01 11:53:52 浏览: 50
以下是Python的实现代码:
```python
import sys
# 邻接矩阵存储图的信息
MAX_VALUE = sys.maxsize # 表示两个节点之间没有边
graph = []
dist = [] # 存储源点到各个节点的最短路径长度
visited = [] # 存储节点的访问状态
# 读入有向图的信息
n, m = map(int, input().split())
nodes = input().split()
index = {nodes[i]: i for i in range(n)}
for i in range(n):
row = [MAX_VALUE] * n
row[i] = 0 # 自己到自己的距离为0
graph.append(row)
for i in range(m):
start, end, weight = input().split()
start_index, end_index = index[start], index[end]
graph[start_index][end_index] = int(weight)
# 读入源点的值
source = input()
# Dijkstra算法
# 初始化dist和visited数组
for i in range(n):
dist.append(graph[index[source]][i])
visited.append(False)
visited[index[source]] = True
for i in range(1, n): # 遍历n-1个节点
min_dist = MAX_VALUE
min_index = -1
# 找到未访问节点中距离源点最近的节点
for j in range(n):
if not visited[j] and dist[j] < min_dist:
min_dist = dist[j]
min_index = j
if min_index == -1: # 未找到可达节点
break
visited[min_index] = True
# 更新源点到未访问节点的距离
for j in range(n):
if not visited[j] and dist[j] > dist[min_index] + graph[min_index][j]:
dist[j] = dist[min_index] + graph[min_index][j]
# 按路径长度递增的次序产生最短路径并输出
for i in range(n):
if dist[i] == MAX_VALUE:
print(source + '到' + nodes[i] + '无路径')
else:
print(source + '到' + nodes[i] + '的最短路径长度为:' + str(dist[i]))
```
输入格式示例:
```
5 8
A B C D E
A B 10
A C 3
B C 1
B D 2
C B 4
C D 8
C E 2
D E 7
A
```
输出格式示例:
```
A到A的最短路径长度为:0
A到B的最短路径长度为:7
A到C的最短路径长度为:3
A到D的最短路径长度为:5
A到E的最短路径长度为:5
```
阅读全文