用c语言判断一个图是否为连通图
时间: 2024-05-01 18:23:59 浏览: 139
要判断一个图是否为连通图,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)。
以下是使用DFS判断图是否为连通图的C语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
bool visited[MAX_VERTICES]; // 标记节点是否被访问过
int adj_matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵表示图
void dfs(int v, int n) {
visited[v] = true;
for (int i = 0; i < n; i++) {
if (adj_matrix[v][i] == 1 && !visited[i]) {
dfs(i, n);
}
}
}
bool is_connected(int n) {
// 初始化visited数组
for (int i = 0; i < n; i++) {
visited[i] = false;
}
// 从第一个节点开始DFS
dfs(0, n);
// 判断是否所有节点都被访问过
for (int i = 0; i < n; i++) {
if (!visited[i]) {
return false;
}
}
return true;
}
int main() {
// 读入图的顶点数和邻接矩阵
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &adj_matrix[i][j]);
}
}
if (is_connected(n)) {
printf("The graph is connected.\n");
} else {
printf("The graph is not connected.\n");
}
return 0;
}
```
这个程序使用邻接矩阵表示图,其中adj_matrix[i][j]为1表示节点i和节点j之间有一条边,为0表示没有边。is_connected函数使用DFS遍历图,判断是否所有节点都被访问过,从而判断图是否为连通图。
阅读全文