C++语言创建图,并采用深度优先搜索和广度优先搜索的方法进行遍历
时间: 2023-06-13 13:08:15 浏览: 108
C++无向图深度优先和广度优先遍历(编译可运行).rar
5星 · 资源好评率100%
创建图可以采用邻接矩阵或邻接表两种方式,这里以邻接表为例。
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 无向图的邻接表表示
class Graph {
private:
int V; // 顶点数
vector<int> *adj; // 邻接表
public:
Graph(int V) {
this->V = V;
adj = new vector<int>[V];
}
// 添加边
void addEdge(int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
// 深度优先遍历
void DFS(int v, bool visited[]) {
visited[v] = true;
cout << v << " ";
for (int i = 0; i < adj[v].size(); i++) {
int u = adj[v][i];
if (!visited[u]) {
DFS(u, visited);
}
}
}
// 广度优先遍历
void BFS(int s) {
bool *visited = new bool[V];
for (int i = 0; i < V; i++) {
visited[i] = false;
}
queue<int> q;
visited[s] = true;
q.push(s);
while (!q.empty()) {
int v = q.front();
cout << v << " ";
q.pop();
for (int i = 0; i < adj[v].size(); i++) {
int u = adj[v][i];
if (!visited[u]) {
visited[u] = true;
q.push(u);
}
}
}
}
};
int main() {
Graph g(5);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 3);
g.addEdge(2, 3);
g.addEdge(2, 4);
bool visited[g.V];
for (int i = 0; i < g.V; i++) {
visited[i] = false;
}
cout << "DFS Traversal: ";
g.DFS(0, visited);
cout << endl;
cout << "BFS Traversal: ";
g.BFS(0);
cout << endl;
return 0;
}
```
输出结果:
```
DFS Traversal: 0 1 3 2 4
BFS Traversal: 0 1 2 3 4
```
其中,DFS和BFS都需要一个visited数组来记录每个顶点是否被访问过。DFS采用递归的方式实现,BFS采用队列实现。
阅读全文