java无向图输出连通分量
时间: 2023-12-04 20:34:09 浏览: 36
以下是Java代码,用于输出无向图的连通分量:
```java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Graph {
private ArrayList<Integer>[] adjList;
public Graph(int n) {
adjList = new ArrayList[n];
for (int i = 0; i < n; i++) {
adjList[i] = new ArrayList<>();
}
}
public void addEdge(int u, int v) {
adjList[u].add(v);
adjList[v].add(u);
}
public void printConnectedComponents() {
boolean[] visited = new boolean[adjList.length];
for (int i = 0; i < adjList.length; i++) {
if (!visited[i]) {
Queue<Integer> queue = new LinkedList<>();
queue.add(i);
visited[i] = true;
while (!queue.isEmpty()) {
int node = queue.poll();
System.out.print(node + " ");
for (int neighbor : adjList[node]) {
if (!visited[neighbor]) {
queue.add(neighbor);
visited[neighbor] = true;
}
}
}
System.out.println();
}
}
}
}
```
上述代码中,我们定义了一个Graph类,该类包含一个adjList数组,用于保存节点的邻接列表。addEdge方法用于向图中添加边。printConnectedComponents方法用于输出图的连通分量。
在printConnectedComponents方法中,我们使用一个boolean类型的visited数组来记录每个节点是否已经被访问过。然后,我们遍历所有节点,如果某个节点没有被访问过,就从该节点开始进行广度优先搜索。在搜索过程中,我们将已经访问过的节点标记为visited,并将它们加入到队列中。最后,我们输出搜索到的所有节点,这些节点就是该图的一个连通分量。我们重复以上过程,直到所有节点都被访问过为止。