Dijkstra算法的Python实现
今天学习了Dijkstra算法,针对算法中的几块实现觉得还是有点难度(自己写写不出来的程度),记录一下方便以后查阅
首先图如下

1、在代码中将图用散列表的方式存储。
'''定义待处理的散列表,一个有向带权无环图'''
graph = {}
graph['start'] = {}
graph['start']['a'] = 6
graph['start']['b'] = 2
graph['a'] = {}
graph['a']['fin'] = 1
graph['b'] = {}
graph['b']['a'] = 3
graph['b']['fin'] = 5
graph['fin'] = {}
2、需要有一个表可以存储起点到每个节点的距离,从而在最终选择路径时作为依据
'''定义距离表,存储起点到每个节点的距离'''
infinity = float('inf')
costs = {}
costs['a'] = 6
costs['b'] = 2
costs['fin'] = infinity
3、创建一个父节点表,在更新路径时需要
'''定义父节点表,存储父节点'''
parents = {}
parents['a'] = "start"
parents['b'] = "start"
parents['fin'] = None
4、创建被处理过的节点表,防止被处理过的节点被重复
'''定义处理过的节点表,记录处理过的节点'''
processed = []
5、定义一个寻找最短点的方法,返回点
def find_lowest_cost_node(costs):
'''在距离表中,找到最短的节点'''
lowest_cost = float('inf')
lowest_cost_node = None
for node in costs:
cost = costs[node]
if cost < lowest_cost and node not in processed:
lowest_cost = cost
lowest_cost_node = node
return lowest_cost_node
6、最终的实现
node = find_lowest_cost_node(costs)
while node is not None:
cost = costs[node]
neighbors = graph[node]
for n in neighbors.keys():
new_cost = cost + neighbors[n]
if costs[n] > new_cost:
costs[n] = new_cost
parents[n] = node
processed.append(node)
node = find_lowest_cost_node(costs)

浙公网安备 33010602011771号