用邻接矩阵保存图。遍历邻接头到c的距离,如果小于min则输出这条路径和min有帮助请采纳
提供参考实例【最短路径算法——Dijkstra算法——python3实现】,链接:https://blog.csdn.net/anlian523/article/details/80893372?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-80893372-blog-82111659.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-80893372-blog-82111659.pc_relevant_default&utm_relevant_index=6
经过整理调试,得到了相应的代码,过程不易,希望能够对你有帮助!
如果感觉有用的话请采纳!
INF = 99999
path_matrix = {
'A': {'B': 1, 'C': INF, 'D': INF, 'E': INF, 'F': 3, "G": 2},
'B': {'A': 1, "C": 1, "D": INF, "E": INF, "F": INF, "G": 2},
'C': {'A': INF, 'B': 1, 'D': 3, 'E': INF, 'F': INF, 'G': 4},
'D': {'A': INF, 'B': INF, 'C': 3, 'E': 3, 'F': INF, 'G': 2},
'E': {'A': INF, 'B': INF, 'C': INF, 'D': 3, 'F': 1, 'G': 2},
'F': {'A': 3, 'B': INF, 'C': INF, 'D': INF, 'E': 1, 'G': 5},
'G': {'A': 2, 'B': 2, 'C': 4, 'D': 2, 'E': 2, 'F': 5}
}
def the_dijkstra(path, start_node):
visited_node = [start_node]
result = path[start_node]
del path[start_node]
other_list = list(path.keys())
while len(other_list):
temp_node = visited_node[-1]
if temp_node != start_node: # 如果不是起始点
distance_list = []
node_list = []
for item in other_list:
distance_list.append(path_matrix[temp_node][item])
node_list.append(item)
if result[item] > result[temp_node] + path_matrix[temp_node][item]:
result[item] = result[temp_node] + path_matrix[temp_node][item]
min_dist = min(distance_list)
the_index = distance_list.index(min_dist)
min_node = other_list.pop(the_index)
visited_node.append(min_node)
else: # 如果是起始点
# 找到距离起点路径最短的地点
min_key = list(result.keys())[0]
min_path = result[min_key]
for key, value in result.items():
if value < min_path:
min_path = value
min_key = key
visited_node.append(min_key)
the_index = other_list.index(min_key)
other_list.pop(the_index)
print(result)
the_dijkstra(path_matrix, "C")
输出结果如下: