Python中networkx中shortest_path使用的是哪一种最短路径方法

是Dijkstra算法吗?... 是Dijkstra算法吗? 展开
 我来答
牛乃茴
2014-04-21 · 尘世间的一个小书童。
牛乃茴
采纳数:35 获赞数:345

向TA提问 私信TA
展开全部

不全是。依据传入的参数决定调用哪种算法。

看源码:至少涉及了dijkstra、广度优先/深度优先算法。

if source is None:
        if target is None:
            ## Find paths between all pairs.
            if weight is None:
                paths=nx.all_pairs_shortest_path(G)
            else:
                paths=nx.all_pairs_dijkstra_path(G,weight=weight)
        else:
            ## Find paths from all nodes co-accessible to the target.
            directed = G.is_directed()
            if directed:
               G.reverse(copy=False)

            if weight is None:
                paths=nx.single_source_shortest_path(G,target)
            else:
                paths=nx.single_source_dijkstra_path(G,target,weight=weight)

            # Now flip the paths so they go from a source to the target.
            for target in paths:
                paths[target] = list(reversed(paths[target]))

            if directed:
                G.reverse(copy=False)
    else:
        if target is None:
            ## Find paths to all nodes accessible from the source.
            if weight is None:
                paths=nx.single_source_shortest_path(G,source)
            else:
                paths=nx.single_source_dijkstra_path(G,source,weight=weight)
        else:
            ## Find shortest source-target path.
            if weight is None:
                paths=nx.bidirectional_shortest_path(G,source,target)
            else:
                paths=nx.dijkstra_path(G,source,target,weight)
追问
这个没包含source确定,arget不确定的情况哦?
追答
可能是我贴的有问题,其实源码中是配对的(从1开始数,第4个else和第1个if配对)。建议自行查看源码,可以用wingIDE4.1,非常方便。另这里贴出的是networkx.shortest_paths.shortest_path方法的源码,另有networkx.shortest_path方法(使用标准的BFS)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式