邻接表深度优先遍历c
时间: 2023-11-27 22:47:48 浏览: 90
以下是邻接表深度优先遍历的C语言代码实现:
```c
#define MAX_VERTEX_NUM 20 // 最大顶点数
typedef struct ArcNode { // 边表结点
int adjvex; // 邻接点在数组中的位置下标
struct ArcNode *next; // 指向下一个邻接点的指针
}ArcNode;
typedef struct VNode { // 顶点表结点
char vertex; // 顶点信息
ArcNode *firstedge; // 指向第一个邻接点的指针
}VNode, AdjList[MAX_VERTEX_NUM];
typedef struct { // 图
AdjList vertices; // 邻接表
int vexnum, arcnum; // 顶点数和边数
}ALGraph;
int visited[MAX_VERTEX_NUM]; // 访问标记数组
// 邻接表深度优先遍历
void DFS(ALGraph G, int v) {
printf("%c ", G.vertices[v].vertex); // 输出顶点信息
visited[v] = 1; // 标记为已访问
ArcNode *p = G.vertices[v].firstedge;
while (p != NULL) {
int j = p->adjvex;
if (visited[j] == 0) { // 若邻接点未被访问,则递归访问
DFS(G, j);
}
p = p->next;
}
}
// 邻接表深度优先遍历入口函数
void DFSTraverse(ALGraph G) {
for (int i = 0; i < G.vexnum; i++) {
visited[i] = 0; // 初始化访问标记数组
}
for (int i = 0; i < G.vexnum; i++) {
if (visited[i] == 0) { // 若该顶点未被访问,则从该顶点开始递归访问
DFS(G, i);
}
}
}
```
阅读全文