以下为我整理的狄克斯特拉算法完整代码请大家指正(经过测试练习亦通过)
def solution(costs, parents, graph):
processed = []
node = find_lowest_cost_node(costs=costs, processed=processed)
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=costs, processed=processed)
return costs, parents, processed
def find_lowest_cost_node(costs, processed):
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
if __name__ == '__main__':
graph = {'start': {'a': 6, 'b': 2}, 'a': {'end': 1}, 'b': {'a': 3, 'end': 5}, 'end': {}}
parents = {'a': 'start', 'b': 'start', 'end': None}
costs = {'a': 6, 'b': 2, 'end': float('inf')}
for x in solution(graph=graph, costs=costs, parents=parents):
print(x)
以下为执行结果