C语言代码实现一、实验目的 掌握无向图的存储表示和DFS(深度优先搜索算法)的运用。 二、实验内容: 1. 利用“邻接矩阵”存储无向图; 2.利用DFS(深度优先搜索算法)判断无向图中是否有圈。
时间: 2024-02-20 20:59:29 浏览: 86
好的,下面是C语言代码的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点数组
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数量
int edge_num; // 边数量
} Graph;
int visited[MAX_VERTEX_NUM]; // 记录点是否被访问过
// 添加边
void add_edge(Graph* graph, int u, int v) {
graph->edge[u][v] = 1;
graph->edge[v][u] = 1;
graph->edge_num++;
}
// DFS遍历
int dfs(Graph* graph, int u, int parent) {
visited[u] = 1;
for (int v = 0; v < graph->vertex_num; v++) {
if (graph->edge[u][v]) {
if (!visited[v]) {
if (dfs(graph, v, u)) {
return 1;
}
} else if (v != parent) {
return 1;
}
}
}
return 0;
}
// 判断无向图是否有环
int has_cycle(Graph* graph) {
for (int u = 0; u < graph->vertex_num; u++) {
visited[u] = 0;
}
for (int u = 0; u < graph->vertex_num; u++) {
if (!visited[u]) {
if (dfs(graph, u, -1)) {
return 1;
}
}
}
return 0;
}
int main() {
Graph graph;
graph.vertex_num = 6;
graph.edge_num = 0;
for (int i = 0; i < graph.vertex_num; i++) {
for (int j = 0; j < graph.vertex_num; j++) {
graph.edge[i][j] = 0;
}
}
add_edge(&graph, 0, 1);
add_edge(&graph, 0, 2);
add_edge(&graph, 1, 2);
add_edge(&graph, 3, 4);
add_edge(&graph, 4, 5);
if (has_cycle(&graph)) {
printf("图中有环\n");
} else {
printf("图中无环\n");
}
return 0;
}
```
这段代码中,我们定义了一个结构体`Graph`来存储无向图的信息,包括顶点数组、邻接矩阵、顶点数量和边数量。我们使用邻接矩阵来存储无向图,其中`edge[i][j]`表示顶点i和j之间是否有边。在添加边的函数`add_edge`中,我们将`edge[u][v]`和`edge[v][u]`都设置为1来表示有一条边连接u和v。在DFS遍历中,我们使用递归来遍历所有的顶点,并记录每个点是否被访问过。如果在遍历的过程中发现了一个点已经被访问过了,而且这个点不是当前点的父节点,那么说明图中存在环,返回1。在判断无向图是否有环的函数`has_cycle`中,我们遍历所有的顶点,如果当前点没有被访问过,就调用DFS遍历函数来判断是否有环。最后,我们可以根据返回值来判断图是否有环。在这个例子中,我们手动创建了一个无向图,并调用`has_cycle`函数来判断是否有环。
阅读全文
相关推荐
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![-](https://img-home.csdnimg.cn/images/20241231044947.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)