gpt4 book ai didi

java - jgrapht - 获取所有遍历节点的列表

转载 作者:行者123 更新时间:2023-11-30 07:45:49 28 4
gpt4 key购买 nike

以下是使用 Dijkstra 算法查找最短路径的示例代码:

public static void main(String args[]) {
SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> graph = new SimpleDirectedWeightedGraph<String, DefaultWeightedEdge>(DefaultWeightedEdge.class);
graph.addVertex("vertex1");
graph.addVertex("vertex2");
graph.addVertex("vertex3");
graph.addVertex("vertex4");
graph.addVertex("vertex5");

DefaultWeightedEdge e1 = graph.addEdge("vertex1", "vertex2");
graph.setEdgeWeight(e1, 5);

DefaultWeightedEdge e2 = graph.addEdge("vertex2", "vertex3");
graph.setEdgeWeight(e2, 3);

DefaultWeightedEdge e3 = graph.addEdge("vertex4", "vertex5");
graph.setEdgeWeight(e3, 6);

DefaultWeightedEdge e4 = graph.addEdge("vertex2", "vertex4");
graph.setEdgeWeight(e4, 2);

DefaultWeightedEdge e5 = graph.addEdge("vertex5", "vertex4");
graph.setEdgeWeight(e5, 4);

DefaultWeightedEdge e6 = graph.addEdge("vertex2", "vertex5");
graph.setEdgeWeight(e6, 9);

DefaultWeightedEdge e7 = graph.addEdge("vertex4", "vertex1");
graph.setEdgeWeight(e7, 7);

DefaultWeightedEdge e8 = graph.addEdge("vertex3", "vertex2");
graph.setEdgeWeight(e8, 2);

DefaultWeightedEdge e9 = graph.addEdge("vertex1", "vertex3");
graph.setEdgeWeight(e9, 10);

DefaultWeightedEdge e10 = graph.addEdge("vertex3", "vertex5");
graph.setEdgeWeight(e10, 1);

System.out.println("Shortest path from vertex1 to vertex5:");
List<DefaultWeightedEdge> shortest_path = DijkstraShortestPath.findPathBetween(graph,"vertex1", "vertex5");
System.out.println(shortest_path);
}

是否有可能获得算法已到达并标记为已访问的节点列表?我看到有一个叫做TraversalListener的东西,但它看起来只适用于迭代器,例如 BreadthFirstIterator。

最佳答案

看起来没有使用 DijkstraShortestPath 类来实现此目的的工具。这是因为图迭代器中添加了遍历监听器,而 DijkstraShortestPath 使用的迭代器无法访问。

因此,唯一的解决方案是将 DijkstraShortestPath 代码复制到一个新类中(我们称之为 MyDijkstraShortestPath)并添加遍历监听器。

首先,您需要创建一个继承自 TraversalListenerAdapter 的类 MyTraversalListener,并重写您想要的方法。

class MyTraversalListener<V, E> extends TraversalListenerAdapter<V, E> {
// override the method you want, like vertexTraversed and edgeTraversed
}

然后,在新的 MyDijkstraShortestPath 类的构造函数中,我们需要添加它:

ClosestFirstIterator<V, E> iter =
new ClosestFirstIterator<V, E>(graph, startVertex, radius);
iter.addTraversalListener(new MyTraversalListener<V, E>());

关于java - jgrapht - 获取所有遍历节点的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com