C语言根据输入的图的邻接矩阵A,判断此图的连通分量的个数。 【输入形式】 第一行为图的结点个数n,之后的n行为邻接矩阵的内容,每行n个数表示。其中A[i][j]=1表示两个结点邻接,而A[i][j]=0表示两个结点无邻接关系。 【输出形式】 输出此图连通分量的个数
时间: 2024-05-14 09:19:19 浏览: 91
实验_C++_数据结构_图连通分量_
5星 · 资源好评率100%
以下是C语言代码实现:
```c
#include <stdio.h>
#define MAX_N 100
int n, A[MAX_N][MAX_N], visited[MAX_N], cnt;
void dfs(int u) {
visited[u] = 1;
for (int v = 0; v < n; ++v) {
if (A[u][v] && !visited[v]) {
dfs(v);
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
scanf("%d", &A[i][j]);
}
}
for (int i = 0; i < n; ++i) {
if (!visited[i]) {
dfs(i);
++cnt;
}
}
printf("%d\n", cnt);
0;
}
```
我们使用深度优先搜索(DFS)来遍历图,如果一个结点未被访问过,则说明它属于一个新的连通分量,我们从该结点开始进行 DFS,可以访问到的所有结点都属于同一个连通分量。最后,我们统计 DFS 的次数,即为连通分量的个数。
阅读全文