Pygraph - 具有特定权重的两个节点之间的路径

时间:2011-10-11 15:24:47

标签: python graph pygraph

我想在图中找到一个连接两个节点但不使用同一节点两次的路径。边缘的权重之和必须在一定范围内。

我需要在 pygraph 中实现它。我不确定是否已经有一个算法可以用于此目的。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

编辑:我最初误解了这个问题。我已经纠正了我的回答。此功能未内置于pygraphlib库中,但您可以轻松实现它。考虑这样的事情,它基本上得到最短路径,决定它是否在预定范围内,然后移除权重最小的边缘,并计算新的最短路径,并重复。

from pygraphlib import pygraph, algo

edges = [(1,2),(2,3),(3,4),(4,6),(6,7),(3,5),(4,5),(7,1),(2,5),(5,7)]
graph = pygraph.from_list(edges)

pathList = []
shortestPath = algo.shortest_path(graph, startNode, endNode)
cost = shortestPath[len(shortestPath)-1][1]

while cost <= maxCost:
    if cost >= minCost:
        pathList.append(shortestPath)

    minEdgeWt = float('inf')
    for i in range(len(shortestPath)-1):
        if shortestPath[i+1][1] - shortestPath[i][1] < minEdgeWt:
            minEdgeWt = shortestPath[i+1][1] - shortestPath[i][1]
            edgeNodes = (shortestPath[i][0], shortestPath[i+1][0])

    #Not sure of the syntax here, edgeNodes is a tuple, and hide_edge requires an edge.
    graph.hide_edge(edgeNodes)
    shortestPath = alog.shortest_path(graph, startNode, endNode)
    cost = shortestPath[len(shortestPath)-1][1]

return pathList

请注意,我找不到pygraphlib的副本,因为它已不再处于开发阶段,所以我无法测试上面的代码。它应该工作,修改语法不确定性。另外,如果可能的话,我建议在python中使用networkx [link] 进行任何类型的图形操作,因为它在更积极的开发中更完整,更完整然后记录pygraphlib。只是一个建议。