用c++语言写一个程序完成图的深度优先遍历算法和广度优先遍历算法
时间: 2023-06-22 22:44:13 浏览: 152
C/C++实现图的深度优先遍历和广度优先遍历
好的,以下是深度优先遍历算法和广度优先遍历算法的示例代码(使用C++语言实现):
```c++
#include<iostream>
#include<queue>
#include<stack>
#include<unordered_map>
#include<unordered_set>
#include<vector>
using namespace std;
// 图的表示方式:邻接表
unordered_map<int, unordered_set<int>> graph;
// 深度优先遍历算法
void dfs(int start, unordered_set<int>& visited) {
stack<int> st; // 用栈来实现深度优先遍历
st.push(start);
while (!st.empty()) {
int node = st.top();
st.pop();
if (visited.find(node) == visited.end()) {
visited.insert(node);
for (const int& neighbor : graph[node]) {
st.push(neighbor);
}
}
}
}
// 广度优先遍历算法
void bfs(int start, unordered_set<int>& visited) {
queue<int> q; // 用队列来实现广度优先遍历
q.push(start);
while (!q.empty()) {
int node = q.front();
q.pop();
if (visited.find(node) == visited.end()) {
visited.insert(node);
for (const int& neighbor : graph[node]) {
q.push(neighbor);
}
}
}
}
int main() {
// 构建一个简单的图
graph[1] = {2, 3};
graph[2] = {1, 4, 5};
graph[3] = {1, 6};
graph[4] = {2};
graph[5] = {2, 6};
graph[6] = {3, 5};
unordered_set<int> visited;
// 深度优先遍历
dfs(1, visited);
cout<<"深度优先遍历结果:";
for (const int& node : visited) {
cout<<node<<" ";
}
cout<<endl;
visited.clear(); // 清空visited
// 广度优先遍历
bfs(1, visited);
cout<<"广度优先遍历结果:";
for (const int& node : visited) {
cout<<node<<" ";
}
cout<<endl;
return 0;
}
```
该示例代码中,我们使用了邻接表来表示图,深度优先遍历算法使用栈实现,广度优先遍历算法使用队列实现。在测试代码中,我们构建了一个简单的图,并对其进行了深度优先遍历和广度优先遍历,输出了遍历结果。
阅读全文