基于C++实现图的深度优先遍历算法,广度优先遍历算法,其中邻接表的创建相当于创建多个单链表
时间: 2024-03-24 14:38:38 浏览: 65
好的,下面是基于C++实现图的深度优先遍历算法和广度优先遍历算法,并附带邻接表的创建过程。
```c++
#include <iostream>
#include <queue>
#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 s, int t) {
adj[s].push_back(t);
adj[t].push_back(s);
}
};
// 深度优先遍历
void dfs(Graph& g, int s, bool* visited) {
visited[s] = true;
cout << s << " ";
for (int i = 0; i < g.adj[s].size(); ++i) {
int t = g.adj[s][i];
if (!visited[t]) {
dfs(g, t, visited);
}
}
}
// 广度优先遍历
void bfs(Graph& g, int s) {
queue<int> q;
bool visited[g.v] = {false}; // 记录每个顶点是否已被访问
q.push(s);
visited[s] = true;
while (!q.empty()) {
int front = q.front();
cout << front << " ";
q.pop();
for (int i = 0; i < g.adj[front].size(); ++i) {
int t = g.adj[front][i];
if (!visited[t]) {
q.push(t);
visited[t] = true;
}
}
}
}
int main() {
int v = 6; // 图的顶点数
Graph g(v);
// 添加边
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 4);
g.addEdge(3, 5);
g.addEdge(4, 5);
cout << "图的深度优先遍历结果:";
bool visited[v] = {false}; // 记录每个顶点是否已被访问
dfs(g, 0, visited);
cout << endl;
cout << "图的广度优先遍历结果:";
bfs(g, 0);
cout << endl;
return 0;
}
```
这里给出的邻接表的创建过程是在图的构造函数中完成的。逐一创建单链表也是可以的,只是比较繁琐。
阅读全文