迅速な対応 chessofnerd と Joshua に感謝します。不明なログと不明な質問で申し訳ありません。言い換えさせてください。
Joshua: DB に体重を保存し、Transformer で DB から取得しています。
トポロジに 4 つのデバイスが接続されており、一部のデバイス間には複数の接続があり、2 つのデバイス間には以下に示すように単一の接続しかありません。
無向加重グラフを使用しています。
最初は、すべてのリンクに 0 の重みが割り当てられます。 D1 と D4 の間のパスを要求すると、各リンクの重みを 1 ずつ増やします。
別のパスに対する 2 番目のリクエストが来ると、Transformer を介してすべての重みを与えます。リクエストが 2 回目に来ると、リンク 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; }
}