判断无向图是否连通c语言代码实现dev-c++5.11
时间: 2023-11-20 15:07:29 浏览: 118
以下是使用深度优先搜索(DFS)算法判断无向图是否连通的 C 语言代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100 // 最大顶点数
int visited[MAXN]; // 记录每个顶点是否被访问过
int graph[MAXN][MAXN]; // 存储无向图
int n; // 顶点数
void dfs(int v) {
visited[v] = 1;
for (int i = 0; i < n; i++) {
if (graph[v][i] && !visited[i]) {
dfs(i);
}
}
}
int is_connected() {
// 初始化 visited 数组
for (int i = 0; i < n; i++) {
visited[i] = 0;
}
// 从第一个顶点开始 DFS
dfs(0);
// 判断是否所有顶点都被访问过
for (int i = 0; i < n; i++) {
if (!visited[i]) {
return 0; // 存在没有被访问过的顶点,说明图不连通
}
}
return 1; // 所有顶点都被访问过,说明图连通
}
int main() {
// 读入无向图信息
printf("请输入顶点数和边数:");
scanf("%d", &n);
int m;
scanf("%d", &m);
printf("请输入每条边的两个端点:\n");
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
graph[u][v] = graph[v][u] = 1;
}
// 判断无向图是否连通
if (is_connected()) {
printf("无向图是连通的\n");
} else {
printf("无向图不连通\n");
}
return 0;
}
```
代码中使用了 DFS 算法来遍历无向图。首先从第一个顶点开始遍历,然后递归遍历与该顶点相邻的未被访问过的顶点。最后判断是否所有顶点都被访问过,如果是则说明无向图连通,否则不连通。
阅读全文