无向图的深度优先遍历结构体
时间: 2023-11-02 13:03:36 浏览: 78
图的深度优先遍历
5星 · 资源好评率100%
以下是一个简单的无向图深度优先遍历的结构体示例:
```C++
#include <iostream>
#include <vector>
using namespace std;
struct Graph {
int V; // 顶点数
vector<int> *adj; // 邻接表
Graph(int V) {
this->V = V;
adj = new vector<int>[V];
}
void addEdge(int v, int w) {
adj[v].push_back(w);
adj[w].push_back(v);
}
void DFSUtil(int v, bool visited[]) {
visited[v] = true;
cout << v << " ";
for (auto i = adj[v].begin(); i != adj[v].end(); ++i) {
if (!visited[*i]) {
DFSUtil(*i, visited);
}
}
}
void DFS(int v) {
bool *visited = new bool[V];
for (int i = 0; i < V; i++) {
visited[i] = false;
}
DFSUtil(v, visited);
}
};
int main() {
Graph g(5);
g.addEdge(1, 0);
g.addEdge(0, 2);
g.addEdge(2, 1);
g.addEdge(0, 3);
g.addEdge(1, 4);
cout << "Depth First Traversal starting from vertex 0: " << endl;
g.DFS(0);
return 0;
}
```
在这个结构体中,我们定义了一个 `Graph` 结构体,该结构体包含了图的顶点数 `V` 和邻接表 `adj`。我们还定义了 `addEdge` 函数来添加边,以及 `DFSUtil` 函数来实现递归深度优先遍历,和 `DFS` 函数来初始化并调用 `DFSUtil` 函数。在 `DFSUtil` 函数中,我们使用了一个布尔类型的数组 `visited` 来跟踪哪些节点已经被访问过了。最后,在 `main` 函数中,我们创建了一个 `Graph` 对象,并添加了一些边,然后调用 `DFS` 函数来进行深度优先遍历。
阅读全文