JGraphT:无论边缘方向如何,都能找到最短路径

问题描述 投票:1回答:1

我使用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之间的边缘方向如何,有没有办法找到路径?

java shortest-path jgrapht
1个回答
2
投票

您可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.