求解连通分量个数pta用c语言实现
时间: 2024-12-20 16:05:01 浏览: 35
要使用C语言实现一个计算无向图连通分量个数的程序,我们可以使用深度优先搜索(DFS)或者广度优先搜索(BFS)算法。以下是一个使用DFS的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_VERTICES 100
int graph[MAX_VERTICES][MAX_VERTICES];
bool visited[MAX_VERTICES];
int n; // Number of vertices
void DFS(int vertex) {
visited[vertex] = true;
for (int i = 0; i < n; i++) {
if (graph[vertex][i] && !visited[i]) {
DFS(i);
}
}
}
int countConnectedComponents() {
int count = 0;
for (int i = 0; i < n; i++) {
if (!visited[i]) {
DFS(i);
count++;
}
}
return count;
}
int main() {
printf("Enter the number of vertices: ");
scanf("%d", &n);
printf("Enter the adjacency matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
int components = countConnectedComponents();
printf("Number of connected components: %d\n", components);
return 0;
}
```
这个程序的工作原理如下:
1. 首先,我们定义了一个二维数组`graph`来表示邻接矩阵,一个布尔数组`visited`来记录每个顶点是否被访问过,以及一个整数`n`来表示顶点的数量。
2. `DFS`函数实现了深度优先搜索算法。它从给定的顶点开始,递归地访问所有相邻且未被访问过的顶点。
3. `countConnectedComponents`函数遍历所有顶点,对每个未被访问的顶点调用`DFS`,并增加连通分量的计数。
4. 在`main`函数中,我们首先输入顶点的数量,然后输入邻接矩阵。
5. 最后,我们调用`countConnectedComponents`函数并输出结果。
这个程序可以有效地计算无向图的连通分量个数。你可以根据需要修改输入方式或图的数据结构。
阅读全文