写一个C语言程序,判断一个图中连通分量的个数 根据图的邻接矩阵,确定该图中连通分量的个数,并输出每个连通分量中的顶点。 提示: 0 1 1 1 0 0 0 0 10001000 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 01000000 00000000 0 0 00 0 001 0 0 0 0 0 0 1 0 二Components == Component 1 : 0 1 2 3 4 Component 2:5 Component 3:6 7 Total Components: 3
时间: 2023-12-31 17:04:39 浏览: 97
图的遍历——计算连通分量个数
5星 · 资源好评率100%
以下是一个基于邻接矩阵的 C 语言程序,用于判断一个图中连通分量的个数并输出每个连通分量中的顶点。这个程序使用了深度优先搜索算法:
```c
#include <stdio.h>
#define MAX_VERTICES 100
int adj_matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
int visited[MAX_VERTICES]; // 标记节点是否被访问过
int num_vertices; // 节点数
// 深度优先搜索函数
void dfs(int v, int component) {
int i;
visited[v] = component;
printf("%d ", v);
for (i = 0; i < num_vertices; i++) {
if (adj_matrix[v][i] && !visited[i]) {
dfs(i, component);
}
}
}
// 统计连通分量个数并输出每个连通分量中的顶点
void count_components() {
int i, component = 1;
for (i = 0; i < num_vertices; i++) {
if (!visited[i]) {
printf("Component %d: ", component);
dfs(i, component);
printf("\n");
component++;
}
}
printf("Total Components: %d\n", component - 1);
}
int main() {
int i, j;
printf("Enter the number of vertices: ");
scanf("%d", &num_vertices);
printf("Enter the adjacency matrix:\n");
for (i = 0; i < num_vertices; i++) {
for (j = 0; j < num_vertices; j++) {
scanf("%d", &adj_matrix[i][j]);
}
}
count_components();
return 0;
}
```
你可以将上述程序复制到一个 C 语言编译器中进行编译和运行,然后输入邻接矩阵,即可得到图中连通分量的个数和每个连通分量中的顶点。
阅读全文