感谢国际足联和约书亚的快速反应。我很抱歉不清楚日志和不清楚的问题。让我改一下。
约书亚: 我将权重存储在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; }
}
答案 0 :(得分:0)
您正在创建DijkstraShortestPath
,以便缓存结果。向构造函数添加“false”参数以更改此行为。
(不,如果你改变边缘权重,缓存不会中毒;如果你这样做,你有责任创建一个新的DSP实例,或者首先不使用缓存。)