加权图DijkstraShortestPath:getpath()不返回成本最低的路径

时间:2013-03-05 03:07:48

标签: jung

  

感谢国际足联和约书亚的快速反应。我很抱歉不清楚日志和不清楚的问题。让我改一下。

     

约书亚:     我将权重存储在DB中并从变换器中的DB中检索。

     

我的拓扑结构中连接了4个设备,某些设备之间有多个连接,2个设备之间只有单个连接,如下所示。

     

我正在使用无向加权图。

     

最初所有链接的权重均为0.当我请求D1和D4之间的路径时,我将每个链接的权重增加1.

     

当第二个请求来到另一条路径时,我通过Transformer提供所有权重。   当第二次请求时,我正确地为链路L1,L2,L3和其他链路提供0的权重。

     

由于(L4,L5,L3)或(L6,L7,L3)或(L8,L9,L3)的重量小于(L1,L2,L3)的重量,我期待我会得到其中一个这些路径 - (L4,L5,L3)或(L6,L7,L3)或(L8,L9,L3)。但我又来了(L1,L2,L3)

     

D1 --- L1 - > D2 --- --- L2> D3 - L3 ---> D4

     

D1 --- L4 - > D2 --- --- L5> D3 - L3 ---> D4

     

D1 --- L6 - > D2 --- --- L7> D3 - L3 ---> D4

     

D1 --- L8 - > D2 --- --- L9> D3 - L3 ----> D4

     

变压器只返回为链接预先存储的重量。

     

Graph topology = new UndirectedSparseMultigraph()

     

DijkstraShortestPath pathCalculator = new DijkstraShortestPath(topology,wtTransformer);

     

列出路径= pathCalculator.getPath(node1,node2);

     

private final Transformer wtTransformer = new Transformer(){

 public Integer transform(Link link) {
     int weight = getWeightForLink(link, true);
     return weight;
  }
     

}

1 个答案:

答案 0 :(得分:0)

您正在创建DijkstraShortestPath,以便缓存结果。向构造函数添加“false”参数以更改此行为。

http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/shortestpath/DijkstraShortestPath.html

(不,如果你改变边缘权重,缓存不会中毒;如果你这样做,你有责任创建一个新的DSP实例,或者首先不使用缓存。)