如何调用深度优先遍历函数
时间: 2023-07-24 12:29:41 浏览: 87
深度优先遍历(Depth-First-Search,简称DFS)是一种图的遍历算法,可以用于遍历图中所有节点。在C语言中,可以使用递归或栈来实现DFS算法。
以下是使用递归实现DFS算法的示例代码:
```c
#define MAX_VERTEX_NUM 20
typedef struct ArcNode {
int adjvex; // 邻接点编号
struct ArcNode *next; // 指向下一个邻接点的指针
} ArcNode;
typedef struct {
int data; // 存储顶点的数据
int visited; // 标记该顶点是否已被访问过
ArcNode *first; // 指向第一个邻接点的指针
} VNode;
typedef struct {
VNode adjlist[MAX_VERTEX_NUM]; // 存储顶点的数组
int vexnum, arcnum; // 顶点数和边数
} ALGraph;
// DFS算法的递归函数
void DFS(ALGraph *G, int v) {
printf("%d ", G->adjlist[v].data);
G->adjlist[v].visited = 1;
ArcNode *p = G->adjlist[v].first;
while (p != NULL) {
if (G->adjlist[p->adjvex].visited == 0) {
DFS(G, p->adjvex);
}
p = p->next;
}
}
// DFS算法的入口函数
void DFSTraverse(ALGraph *G) {
for (int i = 0; i < G->vexnum; i++) {
G->adjlist[i].visited = 0;
}
for (int i = 0; i < G->vexnum; i++) {
if (G->adjlist[i].visited == 0) {
DFS(G, i);
}
}
}
```
以上代码中,ALGraph是一个邻接表表示的图结构体,DFS是DFS算法的递归函数,DFSTraverse是DFS算法的入口函数。在DFS函数中,首先输出当前节点的数据,并将该节点标记为已访问。然后遍历该节点的所有邻接点,如果邻接点未被访问过,则递归调用DFS函数。在DFSTraverse函数中,首先将所有节点标记为未访问,然后遍历所有未被访问过的节点,调用DFS函数进行遍历。
以下是调用DFS算法的示例代码:
```c
ALGraph G;
CreateALGraph(&G); // 创建图
DFSTraverse(&G); // 深度优先遍历图
```
以上代码中,首先创建一个邻接表表示的图,然后调用DFSTraverse函数进行深度优先遍历。
阅读全文