如何解决如何修改Dijkstra的算法,使其通过python中给定的多个边?
def dijikstra(start,goal):
graph = {
'a': {'b': 15,'c': 13},'b': {'c': 12,'d': 16},'c': {'d': 19,'e': 21,'b': 12},'d': {'e': 13,'z': 17},'e': {'z': 16,'d': 13},'z': {'d': 17}
}
shortest_distance = {}
track_predecessor = {}
unseen_nodes = graph
infinity = 999999
track_path = []
for node in unseen_nodes:
shortest_distance[node] = infinity
shortest_distance[start] = 0
while unseen_nodes:
min_distance_node = None
for node in unseen_nodes:
if min_distance_node is None:
min_distance_node = node
elif shortest_distance[node] < shortest_distance[min_distance_node]:
min_distance_node = node
path_options = graph[min_distance_node].items()
for child_node,weight in path_options:
if weight+shortest_distance[min_distance_node]<shortest_distance[child_node]:
shortest_distance[child_node] = weight+shortest_distance[min_distance_node]
track_predecessor[child_node] = min_distance_node
unseen_nodes.pop(min_distance_node)
currentNode = goal
while currentNode != start:
try:
track_path.insert(0,currentNode)
currentNode = track_predecessor[currentNode]
except KeyError:
print('path is not reachable')
break
track_path.insert(0,start)
if shortest_distance[goal] != infinity:
print('For path ' + str(track_path))
print("shortest distance is :" + str(shortest_distance[goal]))
dijikstra('a','z')
在这里您可以看到Python中Dijkstra算法的基本实现。这样我们可以获得最短的路径。我在这里要做的是找到从源到最终目的地的最短路径,并且该路径也应经过给定的边缘。例如,从a到z覆盖b和c,以便可以实现最短路径。
如何通过修改此代码来实现这种情况
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。