邻接表非递归遍历实现dfs
时间: 2023-11-05 10:52:34 浏览: 124
邻接表非递归实现DFS的代码如下所示:
```c++
void NoReDepthFirstSearch(AdjList g, int v0) {
int visited[MAX]; // 创建visited数组,用于标记顶点是否已被访问
for (int vi = 0; vi < g.vexnum; vi++) {
visited[vi = 0; // 初始化visited数组
}
stack<int> S; // 创建一个栈用于存储待访问的顶点
S.push(v0); // 将初始顶点v0入栈
visited[v0 = 1; // 标记初始顶点v0已被访问
while (!S.empty()) {
int top = S.top(); // 获取栈顶元素
S.pop(); // 栈顶元素出栈
printf("%c ", g.vertexlist[top].data); // 访问栈顶顶点
ArcNode* p = g.vertexlist[top].firstarc; // 获取与栈顶顶点相连的第一个邻接顶点
while (p != NULL) {
if (!visited[p->adjvex]) { // 如果邻接顶点未被访问过
visited[p->adjvex = 1; // 标记邻接顶点已被访问
S.push(p->adjvex); // 将邻接顶点入栈
}
p = p->nextarc; // 继续遍历下一个邻接顶点
}
}
}
```
这段代码使用了一个栈来实现非递归的DFS遍历。首先,创建一个visited数组用于标记顶点是否已被访问。然后,将初始顶点v0入栈,并将其标记为已访问。接下来,进入循环,每次从栈中取出一个顶点,访问它,并将与之相邻的未访问过的顶点入栈。直到栈为空,遍历结束。
希望对你有所帮助!
阅读全文