私は自分で解決策を見つけました。
私の問題には、直接接続されている 2 つのノードと edge に対してのみ複数のパスがあるかどうかのみを確認したいという追加の制約があります。これは、最短パスを計算するだけで、常にこの単一のエッジをパスとして取得できることを意味します。
したがって、私の質問は次のように再定式化できます。
エッジ自体以外に、エッジの 2 つのノードを接続する別のパスはありますか?
解決策は、加重最短パスを使用することです。関心のあるエッジに非常に高い重みを割り当て、1
他のすべてのエッジに重みを割り当てる場合、最小距離が高い重みよりも小さい場合、答えはYESになり、そうでない場合はNOになります。
コードは次のとおりです。
public static boolean areThereMultiplePaths(final Edge edge, DirectedGraph<Entity, Edge> graph) {
Transformer<Edge, Integer> transformer = new Transformer<Edge, Integer>() {
public Integer transform(Edge otherEdge) {
if (otherEdge.equals(edge))
return Integer.MAX_VALUE;
else
return 1;
}
};
DijkstraShortestPath<Entity, Edge> algorithm = new DijkstraShortestPath<Entity, Edge>(graph, transformer);
Double distance = (Double) algorithm.getDistance(edge.getStartNode(), edge.getEndNode());
return distance < Integer.MAX_VALUE;
}