用c++实现图的深度遍历和广度遍历
时间: 2024-05-10 17:16:22 浏览: 115
由C++实现的图的深度遍历和广度遍历
4星 · 用户满意度95%
图的深度遍历(DFS)和广度遍历(BFS)是图论中最基本的算法之一,C++语言提供了STL库,可以方便地实现这两个算法。下面分别介绍DFS和BFS的实现方法。
1. 图的深度遍历(DFS)
深度遍历是一种递归的算法,其基本思路是从一个顶点开始遍历,尽可能深地访问顶点的邻接点,直至到达最深处,然后回溯到前面的结点,继续访问其他未访问的邻接点,直到所有顶点都被访问到。
以下是DFS的C++实现:
```cpp
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
const int MAXN = 100;
vector<int> adj[MAXN];
bool visited[MAXN];
void dfs(int u){
visited[u] = true;
cout << u << " ";
for(int i = 0; i < adj[u].size(); i++){
int v = adj[u][i];
if(!visited[v]){
dfs(v);
}
}
}
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < m; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 1; i <= n; i++){
if(!visited[i]){
dfs(i);
}
}
return 0;
}
```
2. 图的广度遍历(BFS)
广度遍历是一种迭代的算法,其基本思路是从一个顶点开始遍历,依次访问其邻接点,然后将邻接点加入到队列中,继续对队列中的结点进行访问,直到队列为空。
以下是BFS的C++实现:
```cpp
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 100;
vector<int> adj[MAXN];
bool visited[MAXN];
void bfs(int u){
queue<int> q;
visited[u] = true;
q.push(u);
while(!q.empty()){
int u = q.front();
q.pop();
cout << u << " ";
for(int i = 0; i < adj[u].size(); i++){
int v = adj[u][i];
if(!visited[v]){
visited[v] = true;
q.push(v);
}
}
}
}
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < m; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 1; i <= n; i++){
if(!visited[i]){
bfs(i);
}
}
return 0;
}
```
以上就是C++实现图的深度遍历和广度遍历的代码。
阅读全文