java - JGraphT:寻找最短路径而不考虑边缘方向

标签 java shortest-path jgrapht

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

最佳答案

您可以使用 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 除非您确实需要多边/自循环。

关于java - JGraphT:寻找最短路径而不考虑边缘方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55547521/

相关文章:

java - 构建多重映射的正确方法

c++ - 动态规划问题 - 最小成本路径

java - 如何获取 mxCell 的坐标?

java - GC 期间 JVM 标记 GC 线程的 -XX :+UseDynamicNumberOfGCThreads -XX:+TraceDynamicGCThreads enabled to see no.。请解释一下输出日志?

java - hibernate 一对多删除列表

java - 将测试文件添加到 Netbeans 6.7.1 中的 Junit 测试 - getResource 问题,构建目录中缺少文件

java - 最短路径链表

algorithm - KNight MOVe最短

java - 如何使用 jgrapht 库对顶点进行标记或着色?

java - 如何使用 JGraphT 引用自定义顶点来添加边