我在java中使用JUNG创建了一个图形
Graph<Integer, String> g;
public SimpleGraphView2() {
// Graph<V, E> where V is the type of the vertices and E is the type of the edges
g = new SparseGraph<Integer, String>();
// Add some vertices. From above we defined these to be type Integer.
g.addVertex((Integer)1);
g.addVertex((Integer)2);
g.addVertex((Integer)3);
g.addVertex((Integer)4);
g.addVertex((Integer)5);
g.addVertex((Integer)6);
g.addVertex((Integer)7);
g.addVertex((Integer)8);
g.addEdge("A", 1, 2);
g.addEdge("B", 2, 3);
g.addEdge("C", 2, 4);
g.addEdge("D", 4, 5);
g.addEdge("E", 1, 3);
g.addEdge("F", 6, 7);
g.addEdge("G", 7, 8);
}
我想在我创建的图表g中找到断开连接的图表的数量。所以在我的情况下,我希望输出为2(第一个图包含:1,2,3,4,5。第二个包含:6,7,8)。任何帮助将不胜感激
答案 0 :(得分:3)
你想要WeakComponentClusterer:http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/cluster/WeakComponentClusterer.html
答案 1 :(得分:3)
约书亚给了你正确答案。一个例子是:
Transformer<Graph<V,E>, Set<Set<V>>> trns = new WeakComponentClusterer<V,E>();
Set<Set<V>> clusters = trns.transform(graph);
这将为您clusters
提供Set
个({1}}个顶点的Sets
集合。基本上,它看起来像:
{ <---+
{1,2,3},{4,5}, <--- a set of vertices |
{1,2},{3},{5}, |- a set of sets
{1},{2,3,4}, |
... |
} <---+
另外,此算法的速度取决于您拥有的顶点数(正如您所说)以及边数。但是100,000个顶点不应该是一个限制因素。
答案 2 :(得分:2)
简单BFS将为您提供答案...从任何节点启动您的BFS,您将找到可从其访问的所有节点。然后再从另一个尚未访问过的节点启动BFS,依此类推...... / p>