如何修改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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...