:实现图的深度优先遍历
时间: 2023-12-05 10:41:12 浏览: 92
图的深度优先遍历
4星 · 用户满意度95%
C++实现图的深度优先遍历可以使用递归或者栈来实现。以下是使用递归实现的示例代码:
```c++
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
class Graph {
public:
Graph(int n) : adj(n) {}
void addEdge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
void DFS(int start) {
vector<bool> visited(adj.size(), false);
DFSUtil(start, visited);
}
private:
vector<vector<int>> adj;
void DFSUtil(int u, vector<bool>& visited) {
visited[u] = true;
cout << u << " ";
for (int v : adj[u]) {
if (!visited[v]) {
DFSUtil(v, visited);
}
}
}
};
int main() {
Graph g(5);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 3);
g.addEdge(2, 4);
g.DFS(0);
return 0;
}
```
在这个示例中,我们首先定义了一个Graph类,其中包含一个邻接表adj,用于存储图的边。addEdge方法用于向邻接表中添加边。DFS方法用于启动深度优先遍历,它首先创建一个visited数组,用于记录每个节点是否已经被访问过。然后调用DFSUtil方法,该方法使用递归实现深度优先遍历。在DFSUtil方法中,我们首先将当前节点标记为已访问,并输出该节点。然后遍历该节点的所有邻居节点,如果邻居节点没有被访问过,则递归调用DFSUtil方法。
在main函数中,我们创建了一个Graph对象,并向其中添加了一些边。然后调用DFS方法,从节点0开始进行深度优先遍历。
阅读全文