如何在C语言中实现一个无向图的邻接矩阵表示,并用深度优先搜索(DFS)遍历所有节点?请提供具体的实现步骤和代码示例。
时间: 2024-11-04 08:20:17 浏览: 40
在《湖北工业大学自动化技术学院:图基本操作C语言编程实践》中,我们了解到图的存储和遍历是图论在计算机编程中应用的核心内容。对于无向图的邻接矩阵表示和深度优先搜索(DFS)遍历的具体实现,可以通过以下步骤和代码来完成:
参考资源链接:[湖北工业大学自动化技术学院:图基本操作C语言编程实践](https://wenku.csdn.net/doc/6tczvminhk?spm=1055.2569.3001.10343)
首先,定义无向图的邻接矩阵结构。无向图意味着图中的每条边连接两个节点,且边是双向的。邻接矩阵是一个二维数组,其大小为顶点数的平方,矩阵中的元素表示节点间的连接关系,通常用1表示有边连接,用0表示无边连接。
其次,编写深度优先搜索(DFS)算法。DFS是一种用于遍历或搜索树或图的算法,它使用递归或栈的方式进行搜索,直到达到所有节点的最终可达节点。在无向图中,通过DFS算法,可以从任意一个节点开始,沿着图的边访问所有节点。
以下是C语言中实现无向图邻接矩阵表示和DFS遍历的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 10 // 最大顶点数
// 定义图的结构体
typedef struct {
int matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
int numVertices; // 顶点数
} Graph;
// 初始化图
void initializeGraph(Graph *g, int numVertices) {
g->numVertices = numVertices;
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
g->matrix[i][j] = 0; // 初始化邻接矩阵为0
}
}
}
// 添加边
void addEdge(Graph *g, int start, int end) {
g->matrix[start][end] = 1; // 设置矩阵对应位置为1
g->matrix[end][start] = 1; // 由于是无向图,需要同时设置反向连接
}
// DFS遍历函数
void DFS(Graph *g, int v, int visited[]) {
visited[v] = 1;
printf(
参考资源链接:[湖北工业大学自动化技术学院:图基本操作C语言编程实践](https://wenku.csdn.net/doc/6tczvminhk?spm=1055.2569.3001.10343)
阅读全文