用C++在给定的一个图中求最大连通图节点个数
时间: 2024-06-11 17:05:17 浏览: 122
实验_C++_数据结构_图连通分量_
5星 · 资源好评率100%
以下是一个基于深度优先搜索(DFS)的C代码,用于寻找最大连通图中的节点数:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
int visited[MAX_N]; // 标记数组,记录节点是否被访问过
int graph[MAX_N][MAX_N]; // 图的邻接矩阵表示
int n; // 节点数
void dfs(int u, int *cnt) {
visited[u] = 1; // 标记当前节点为已访问
(*cnt)++; // 统计连通图中的节点数
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v]) { // 如果节点v和u相连且未被访问过
dfs(v, cnt); // 递归访问节点v
}
}
}
int get_max_connected_graph() {
int max_cnt = 0; // 最大连通图中的节点数
for (int u = 0; u < n; u++) {
if (!visited[u]) { // 如果节点u未被访问过
int cnt = 0; // 当前连通图中的节点数
dfs(u, &cnt); // 从节点u开始深度优先搜索
if (cnt > max_cnt) {
max_cnt = cnt; // 更新最大连通图中的节点数
}
}
}
return max_cnt;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]); // 读入图的邻接矩阵
}
}
int max_cnt = get_max_connected_graph();
printf("%d\n", max_cnt);
return 0;
}
```
输入格式为:
```
n
a[1][1] a[1][2] ... a[1][n]
a[2][1] a[2][2] ... a[2][n]
...
a[n][1] a[n][2] ... a[n][n]
```
其中,`n`表示节点数,`a[i][j]`表示节点`i`和节点`j`之间是否有边,`1`表示有边,`0`表示无边。
输出格式为最大连通图中的节点数。
阅读全文