我想找到距离为2的所有节点的邻居,以获得不太小的网络(5000个节点和25k个无向边)。现在我正在使用:用JUNG找到距离为2的邻居
ArrayList<Node> twoDistNei = new ArrayList<Node>();
Collection<Node> myThreads = g.getNeighbors(u);
for(Node t:myThreads){
Collection<Node> neighbors = g.getNeighbors(t);
for(Node uu:neighbors){
if(!twoDistNei.contains(uu)){
twoDistNei.add(uu);
}
}
}
但它真的很慢,我想知道是否有更有效和快速的方法来实现这一点。
编辑:我设法利用KNeighborhoodFilter提到,这就是我想出了:
KNeighborhoodFilter filter = new KNeighborhoodFilter(u, 2,KNeighborhoodFilter.EdgeType.IN_OUT);
Graph<Node, Edge> transform = filter.transform(zpa);
Collection<Node> vertices = transform.getVertices();
Set<Node> twoDistThreads = new HashSet<Node>();
for (Node v : vertices) {
if(v.getColor().equals("blue")){
twoDistThreads.add((Thread)v);
}
System.out.println("thread " + v.getName() + " has color " + v.getColor());
}
现在我看到的是,过滤器仅允许变换()原来的网络,并诱导与子图所有选定的节点(加上链接到所选节点的节点......但是为什么?)。 这意味着我必须过滤新的节点集合,以仅捕获我感兴趣的2-dist顶点 - 我有一个二分图,其中一组节点是“蓝色”,另一个是“红色”。 我在这里做事吗,@Joshua?感谢您的帮助!
最好的问候, 西蒙娜
此链接http://en.wikipedia.org/wiki/Graph_traversal上,你可以找到所有的算法realted以图搜索(A *,breadfirst,dikistra等等) – qwr 2013-05-12 13:44:03