JGraphT:无论边的方向如何寻找最短路径

3
我使用JGraphT构建了以下图形A->B<-C,如下所示:
    DirectedPseudograph<Node, Edge> graph = new DirectedPseudograph<>(Edge.class);
    DijkstraShortestPath<Node, Edge> shortestPath = new DijkstraShortestPath<Node, Edge>(graph);
    Node bn1 = new Node("1", "A", null);
    Node bn2 = new Node("2", "B", null);
    Node bn3 = new Node("3", "C", null);

    graph.addVertex(bn1);
    graph.addVertex(bn2);
    graph.addVertex(bn3);

    Edge edge1 = new Edge("PART_OF");
    Edge edge2 = new Edge("IS_A");
    graph.addEdge(bn1, bn2, edge1);
    graph.addEdge(bn3, bn2, edge2);

但是每当我尝试调用时:

shortestPath.getPath(node1, node3);

我得到了一个空数组,意味着没有连接。我理解这可能与边的方向有关,因为A->B->C 的方向可以正常工作。有没有办法找到A和C之间的路径,而不考虑边的方向?

1个回答

5
您可以使用 AsUndirectedGraph 类来实现此功能。
Graph<Node, Edge> graph = new DirectedPseudograph<>(Edge.class);
Node bn1 = new Node("1", "A", null);
Node bn2 = new Node("2", "B", null);
Node bn3 = new Node("3", "C", null);

graph.addVertex(bn1);
graph.addVertex(bn2);
graph.addVertex(bn3);

Edge edge1 = new Edge("PART_OF");
Edge edge2 = new Edge("IS_A");
graph.addEdge(bn1, bn2, edge1);
graph.addEdge(bn3, bn2, edge2);

Graph<Node, Edge> undirGraph=new AsUndirectedGraph<>(graph);
ShortestPathAlgorithm<Node, Edge> shortestPath = new DijkstraShortestPath<Node, Edge>(undirGraph);

注意:除非您真的需要多个边/自环,否则您可能希望使用SimpleDirectedGraph而不是DirectedPseudograph

感谢您的回答。我已经接受了它,因为它回答了我的问题。有没有一种方法可以做到这一点并保持边缘的方向? - p192
1
原始的graph仍然具有所有边缘方向。 undirGraph是有向图的无向视图。 undirGraph由原始图支持,因此对原始图的修改会自动反映在undirGraph中。 - Joris Kinable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接