我想要一个判断无向图是否有圈的C语言源代码。要求是 利用“邻接矩阵”存储无向图; 2.利用DFS(深度优先搜索算法)判断无向图中是否有圈。如果无向图中存在圈,则将所找到的圈的顶点序列依次输出,否则输出“无”。我希望输入:0 1 1 1 0 1 1 1 0时输出的是0 1 2
时间: 2024-05-12 16:15:07 浏览: 60
以下是一个基于邻接矩阵和DFS的C语言源代码,可以判断无向图是否有圈。其中使用了一个数组visited[]来标记每个节点是否已经被访问过,使用了一个数组path[]来记录路径,如果找到了圈就输出路径。
```
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int G[MAXN][MAXN]; // 邻接矩阵表示图
int visited[MAXN]; // 标记每个节点是否已经被访问过
int path[MAXN]; // 记录路径
int n; // 顶点数
int dfs(int v, int p) {
visited[v] = 1;
path[p] = v;
for (int i = 0; i < n; i++) {
if (G[v][i]) {
if (!visited[i]) {
if (dfs(i, p + 1)) {
return 1;
}
} else if (i != path[p - 1]) {
// 找到了圈
printf("%d ", i);
for (int j = p - 1; j >= 0; j--) {
printf("%d ", path[j]);
if (path[j] == i) {
break;
}
}
printf("\n");
return 1;
}
}
}
// 没有找到圈
return 0;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &G[i][j]);
}
}
// 从每个未访问的节点开始DFS,查找圈
for (int i = 0; i < n; i++) {
if (!visited[i] && dfs(i, 0)) {
return 0;
}
}
printf("无\n");
return 0;
}
```
阅读全文