我正在使用带有相当大图形的JGraphT库,并将代码从DefaultUndirectedWeightedGraph
转换为DefaultDirectedWeightedGraph
(我为每个无方向的边都为启动器生成了双重边)。我使用Dijkstra的算法在图中找到最短路径,并且遇到了奇怪的行为-由于发现路径被一个节点关闭,因此我的测试崩溃了。
经过一番研究,结果发现JGraphT的Dijkstra删除了源节点,并包含了用于无向图遍历的接收器节点;相反,它包含了源节点,并删除了有向图遍历的接收器节点。
这是一个例子:
given:
Directed: A --> B --> C --> D --> E --> F
Undirected: A <-> B <-> C <-> D <-> E <-> F
and:
source: A
sink: E
Dijkstra's will yield:
for directed graph: A, B, C, D
for undirected graph: B, C, D, E
有人知道为什么会这样吗?