dijkstra最短路算法
dijkstra最短路算法给定终点src,从全部可能的起点出发,得到全部的最短路径。
def dijkstra(graph,src):
length = len(graph)
type_ = type(graph)
if type_ == list:
nodes =
elif type_ == dict:
nodes = graph.keys()
visited =
path = {src:{src:[]}}
nodes.remove(src)
distance_graph = {src:0}
pre = next = src
while nodes:
distance = float('inf')
for v in visited:
for d in nodes:
new_dist = graph + graph
if new_dist <= distance:
distance = new_dist
next = d
pre = v
graph = new_dist
path = ]
path.append(next)
distance_graph = distance
visited.append(next)
nodes.remove(next)
return distance_graph, path
if __name__ == '__main__':
graph_list = [ ,
,
,
,
,
]
graph_dict = {"s1":{"s1": 0, "s2": 2, "s10": 1, "s12": 4, "s5":3},
"s2":{"s1": 1, "s2": 0, "s10": 4, "s12": 2, "s5":2},
"s10":{"s1": 2, "s2": 1, "s10": 0, "s12":1, "s5":4},
"s12":{"s1": 3, "s2": 5, "s10": 2, "s12":0,"s5":1},
"s5":{"s1": 3, "s2": 5, "s10": 2, "s12":4,"s5":0},
}
distance, path = dijkstra(graph_list, 2)
#print distance, '\n', path
distance, path = dijkstra(graph_dict, 's1')
print distance, '\n', path
参考:graph_algorithm
# 起点starpoint,终点src
def dijkstra_st(graph, startpoint, src):
length = len(graph)
# type_ = type(graph)
# if type_ == list:
# nodes =
# elif type_ == dict:
# nodes = graph.keys()
if isinstance(graph, list):
nodes =
elif isinstance(graph, dict):
nodes = graph.keys()
visited =
path = {src:{src:[]}}
nodes.remove(src)
distance_graph = {src:0}
pre = next = src
while nodes:
distance = float('inf')
for v in visited:
for d in nodes:
new_dist = graph + graph
if new_dist <= distance:
distance = new_dist
next = d
pre = v
graph = new_dist
path = ]
path.append(next)
distance_graph = distance
visited.append(next)
nodes.remove(next)
# return distance_graph, path
dist = distance_graph
path1 = path
path1.reverse()
path1.append(src)
return dist, path1
if __name__ == '__main__':
graph_list = [ ,
,
,
,
,
,
,
]
# 从1到8节点的最短路径
distance, path = dijkstra_st(graph_list, 0, 7)
print('\n', '最优路径为: ', path)
print(' 最优路径对应的最短距离为: %d' % distance, '\n')
# 从2到8节点的最短路径
distance, path = dijkstra_st(graph_list, 1, 7)
print('最优路径为: ', path)
print('最优路径对应的最短距离为: %d' % distance, '\n')
# 从3到7节点的最短路径
distance, path = dijkstra_st(graph_list, 2, 6)
print('最优路径为: ', path)
print('最优路径对应的最短距离为: %d' % distance, '\n')
输出为:
最优路径为:
最优路径对应的最短距离为: 9
最优路径为:
最优路径对应的最短距离为: 9
最优路径为:
参考:【1】MATLAB dijkstra最短路算法
页:
[1]