连通分量个数C代码
时间: 2024-02-13 13:02:55 浏览: 62
以下是一个求无向图连通分量个数的C代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000 // 最大节点数
int n; // 节点数量
int G[MAXN][MAXN]; // 邻接矩阵
int visited[MAXN]; // 标记节点是否已访问
void dfs(int v) {
visited[v] = 1; // 标记当前节点已访问
for (int i = 0; i < n; i++) {
if (G[v][i] && !visited[i]) { // 如果有连边且未访问,则继续搜索
dfs(i);
}
}
}
int count_components() {
int count = 0; // 连通分量数量
for (int i = 0; i < n; i++) {
if (!visited[i]) { // 如果当前节点未被访问,则从该节点开始搜索
dfs(i);
count++; // 搜索完当前连通分量后,连通分量数量加一
}
}
return count;
}
int main() {
// 读入节点数量和邻接矩阵
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &G[i][j]);
}
}
// 计算连通分量数量
int count = count_components();
printf("There are %d connected components in the graph.\n", count);
return 0;
}
```
注意,这段代码中的 `dfs()` 函数使用了深度优先搜索(DFS)算法来遍历连通分量,并且使用了一个 `visited[]` 数组来标记节点是否已访问过。在 `count_components()` 函数中,我们遍历所有节点,如果当前节点未被访问,则从该节点开始进行深度优先搜索,并且在搜索完一个连通分量后将连通分量数量加一。最后返回连通分量数量即可。
阅读全文