c语言判断一个图中连通分量的个数
时间: 2023-08-09 22:04:17 浏览: 187
计算有向图的连通分支个数
5星 · 资源好评率100%
要判断一个图中连通分量的个数,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法。以下是使用DFS算法的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
int graph[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵表示图
bool visited[MAX_VERTICES]; // 记录节点是否被访问过
// DFS遍历图中的一个连通分量
void dfs(int u, int n) {
visited[u] = true; // 标记节点u已经被访问过
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v]) { // 如果节点u和节点v之间有边,并且节点v未被访问过
dfs(v, n); // 递归访问节点v
}
}
}
// 计算图中连通分量的个数
int count_connected_components(int n) {
int count = 0; // 统计连通分量的个数
for (int u = 0; u < n; u++) {
if (!visited[u]) { // 如果节点u未被访问过,说明u所在的连通分量还未被统计
count++; // 连通分量个数加1
dfs(u, n); // 访问u所在的连通分量
}
}
return count;
}
int main() {
int n, m; // n表示图的节点个数,m表示图的边数
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
graph[u][v] = graph[v][u] = 1; // 在邻接矩阵中记录边
}
printf("连通分量个数:%d\n", count_connected_components(n));
return 0;
}
```
这段代码首先读入图的节点个数n和边数m,然后使用邻接矩阵表示图,再通过DFS算法遍历图中的每一个连通分量并计数,最后输出连通分量的个数。
阅读全文