图的深度优先遍历非递归c++
时间: 2023-10-30 18:20:02 浏览: 76
深度优先遍历(DFS)是一种非常常见的图遍历算法,可以通过递归或非递归方式实现。下面是一个非递归实现的C++代码示例:
```c++
void DFS_iterative(int start, vector<int> adj[], vector<bool>& visited) {
// 创建一个栈来存储待访问的节点
stack<int> s;
// 将起始点压入栈中
s.push(start);
while (!s.empty()) {
// 弹出栈顶元素
int cur = s.top();
s.pop();
// 如果该节点没有被访问过,则访问该节点
if (!visited[cur]) {
cout << cur << " ";
visited[cur] = true;
}
// 将所有未被访问过的邻居压入栈中
for (int neighbor : adj[cur]) {
if (!visited[neighbor]) {
s.push(neighbor);
}
}
}
}
```
在上面的代码中,我们使用了一个栈来存储待访问的节点。开始时,我们将起始节点压入栈中。然后,重复以下步骤,直到栈为空:
1. 弹出栈顶元素。
2. 如果该节点没有被访问过,则访问该节点,并将其标记为已访问。
3. 将所有未被访问过的邻居节点压入栈中。
这样,我们就可以按照深度优先的顺序遍历整个图了。
阅读全文