如何在C语言中使用邻接表实现深度优先搜索(DFS)和广度优先搜索(BFS)?请结合实际代码示例进行说明。
时间: 2024-11-14 18:39:40 浏览: 46
在C语言中实现图的深度优先搜索(DFS)和广度优先搜索(BFS)时,邻接表是表示图的常用数据结构。邻接表由一个顶点数组和一个边数组组成,每个顶点关联一个链表,链表中存储与该顶点相连的边。与邻接矩阵相比,邻接表在表示稀疏图时更为节省空间。
参考资源链接:[图的深度优先搜索与广度优先搜索(邻接表实现)](https://wenku.csdn.net/doc/zh0dp2xv7x?spm=1055.2569.3001.10343)
首先,创建图的邻接表结构需要定义顶点和边的数据类型,然后使用一个数组存储图中所有顶点的链表头指针。对于DFS,可以通过递归或栈实现。以下是使用递归实现DFS的代码示例:
```c
// 图的结构定义
typedef struct ArcNode {
int adjvex; // 边所指向的顶点的位置
struct ArcNode *nextarc; // 指向下一条弧的指针
} ArcNode;
typedef struct VNode {
char data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附于该顶点的弧的指针
} VNode, AdjList[MaxVertexNum];
typedef struct {
AdjList vertices; // 邻接表
int vexnum, arcnum; // 图中当前的顶点数和弧数
} ALGraph;
// DFS的递归实现
void DFS(ALGraph *G, int v, int visited[]) {
visited[v] = TRUE;
printf(
参考资源链接:[图的深度优先搜索与广度优先搜索(邻接表实现)](https://wenku.csdn.net/doc/zh0dp2xv7x?spm=1055.2569.3001.10343)
阅读全文