C语言完成以下代码:题目描述 在数据结构上我们学习了连通图,那么你能写一个程序来判断下面给出的图哪些是连通图,哪些不是连通图吗?如果是输出"YES",否则输出"NO"。 输入 测试数据有多组,第一行会给出一个整数N,N<20,表示这幅图节点的个数。然后会给出一个N阶的矩阵表示这个图,1表示连通,0表示两点间无路径,自己到自己的权值记做0。 输出 如果给出的图是一个连通图则输出"YES",否则输出"NO"。
时间: 2024-02-15 20:02:09 浏览: 150
以下是C语言代码实现:
```c
#include <stdio.h>
#define MAXN 20
int n;
int graph[MAXN][MAXN];
int visited[MAXN];
void dfs(int u) {
visited[u] = 1;
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v]) {
dfs(v);
}
}
}
int main() {
while (scanf("%d", &n) == 1) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
int connected = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
visited[j] = 0;
}
dfs(i);
int j;
for (j = 0; j < n; j++) {
if (!visited[j]) {
break;
}
}
if (j == n) {
connected = 1;
break;
}
}
if (connected) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
```
算法思路:
题目要求判断一个图是否为连通图,因此我们可以使用深度优先搜索(DFS)来遍历整个图,如果遍历到的节点数量等于图的节点数量,那么这个图就是连通图,否则不是。
具体实现:
1. 读入图的信息,存储在二维数组 `graph` 中。
2. 对于每个节点,使用 DFS 遍历整个图,并记录遍历到的节点。
3. 如果遍历到的节点数量等于图的节点数量,那么这个图就是连通图,输出 "YES"。
4. 否则,输出 "NO"。
注意:每次遍历前需要将 `visited` 数组清零。
阅读全文