解题思路:

注意事项:

参考代码:

n = int(input())
v0 = int(input())-1
matrix = []
M = float("inf")
for i in range(n):
    matrix.append(list(input().split()))

for i in range(n):
    for j in range(n):
        if matrix[i][j] == "-":
            matrix[i][j] = M
        else:
            matrix[i][j] = int(matrix[i][j])

def dijkstra(matrix,v0):
    used_node = [False] * n
    distance = [M] * n
    distance[v0] = 0
    while used_node.count(False):
        min_value = M
        min_value_index = -1
        for i in range(n):
            if not used_node[i] and distance[i] < min_value:
                min_value = distance[i]
                min_value_index = i
        if min_value_index == -1:
            break
        used_node[min_value_index] = True
        for i in range(n):
            distance[i] = min(distance[i],distance[min_value_index]+matrix[min_value_index][i])
    return distance

distance = dijkstra(matrix,v0)
for i in range(0,n):
    if i == v0:
        continue
    print("("+str(v0+1)+" -> "+str(i+1)+") = "+str(distance[i]))


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论