我有一个graphstream图,每个节点和边都有一些属性。然后,我使用以下代码来获得两个节点之间的最短路径:
AStar astar = new AStar(graph);
astar.setCosts(new DistanceCosts());
astar.setSource(fromNodeIdentifierString);
astar.setTarget(toNodeIdentifierString);
astar.compute();
org.graphstream.graph.Path p = astar.getShortestPath();
然后,我如何从图中删除所有不在路径上的节点,或者以其他方式将路径转化为图?
我试过
graph.clear()
for (Node n : p.getNodeSet())
{
graph.addNode(n);
}
但很明显,这不起作用,因为你不能添加Node对象,只能创建一个具有给定ID的新Node。我真的必须将整个路径重新创建为节点和边吗?所有属性等都要重新创建;或者遍历图中的所有节点,并删除那些ID与路径中的ID不匹配的节点?肯定有一种更有效的方法可以从路径中获得图吗?
List<org.graphstream.graph.Node> nodes = graph.nodes().collect(Collectors.toList());
nodes.removeAll(p.getNodeSet());
nodes.forEach
(
node -> graph.removeNode(node)
);