图的深度优先遍历c++代码
时间: 2023-07-24 09:35:15 浏览: 101
以下是图的深度优先遍历的C++代码示例:
```
#include<iostream>
#include<vector>
using namespace std;
const int N = 1e5+10; //最大点数
vector<int> g[N]; //邻接表存储图
bool vis[N]; //标记每个点是否访问过
//深度优先遍历
void dfs(int u){
vis[u] = true; //标记当前节点已经访问过
cout<<u<<" "; //输出当前节点
for(int i=0;i<g[u].size();i++){ //枚举当前节点的所有出边
int v = g[u][i]; //v为当前节点的一个邻居
if(!vis[v]){ //如果v未被访问过
dfs(v); //递归遍历v
}
}
}
int main(){
int n,m;
cin>>n>>m; //输入节点数和边数
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v; //输入一条边的起点和终点
g[u].push_back(v); //存储邻接表
g[v].push_back(u); //如果无向图还需存储反向边
}
for(int i=1;i<=n;i++){ //从1号节点开始遍历
if(!vis[i]){ //如果i未被访问过
dfs(i); //从i开始深度优先遍历
}
}
return 0;
}
```
其中,g[i]表示以i为起点的所有边的终点集合,vis[i]表示第i个节点是否被访问过。在dfs函数中,首先将当前节点u标记为已访问,并输出节点u。然后枚举节点u的所有出边,如果该出边指向的节点v未被访问过,则递归遍历节点v。最后,在主函数中从第一个节点开始遍历,对未被访问过的节点进行深度优先遍历。
阅读全文