0

感谢 chessofnerd 和 Joshua 的及时回复。对于不清楚的日志和不清楚的问题,我很抱歉。让我改写一下。

Joshua:我将权重存储在 DB 中,并从 DB 中的变压器中检索。

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

我正在使用无向加权图。

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

当第二个请求来自另一条路径时,我通过 Transformer 提供所有权重。当请求第二次出现时,我正确地为链接 L1、L2、L3 提供 1 的权重,为其他链接提供 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

转换器只是返回之前为链接存储的权重。

图拓扑 = new UndirectedSparseMultigraph()

DijkstraShortestPath pathCalculator = new DijkstraShortestPath(topology, wtTransformer);

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

私人最终变压器 wtTransformer = new Transformer() {

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

}

4

1 回答 1

0

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

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

(不,如果您更改边缘权重,缓存不会中毒;如果您这样做,则您有责任创建一个新的 DSP 实例,或者一开始就不使用缓存。)

于 2013-03-07T19:06:06.880 回答