我想找到距離爲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