图的深度优先遍历c++
时间: 2023-11-20 07:54:08 浏览: 137
图的深度优先遍历(Depth First Search,DFS)是一种常用的图遍历算法,它可以用于查找连通性、寻找路径等问题。下面是C++实现的伪代码:
```
void DFS(int u) {
visited[u] = true; // 标记节点u为已访问
for (int v : adj[u]) { // 遍历节点u的所有邻居节点v
if (!visited[v]) { // 如果节点v未被访问过
DFS(v); // 递归访问节点v
}
}
}
```
其中,`visited`数组用于记录每个节点是否被访问过,`adj`数组用于存储每个节点的邻居节点列表。在实际代码中,可以使用栈来实现DFS的非递归版本。
相关问题
图的深度优先遍历C++
void DFS(int v)
{
visited[v] = true; //标记当前节点已被访问
printf("%d ", v); //输出当前节点
for (int i = 0; i < n; i++) //遍历所有节点
{
if (!visited[i] && G[v][i]) //如果该节点未被访问且与当前节点有连边
{
DFS(i); //递归访问该节点
}
}
}
图的深度优先遍历c++代码
以下是图的深度优先遍历的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。最后,在主函数中从第一个节点开始遍历,对未被访问过的节点进行深度优先遍历。
阅读全文