#include<vector>
using namespace std;
const int MAXV = 1000; //最大顶点数
const int INF = 1000000000; //INF一个很大的数,两点不可到达
//邻接矩阵版
int n, G[MAXV][MAXV]; //n为顶点数
bool vis[MAXV] = {false}; //如果顶点i已被访问,则vis[i] == true
void DFS(int u, int depth){ //u为当前访问的顶点标号,depth为深度
vis[u] = true; //设置u已被访问
for(int v = 0; v < n; v++){ //对每个顶点
if(vis[v] == false && G[u][v] != INF){ //如果v未被访问,且u可到达v
DFS(v, depth + 1); //访问v,深度加1
}
}
}
void DFSTrave(){ //遍历图G
for(int u = 0; u < n; u++){ //对每个顶点u
if(vis[u] == false){ //如果u未被访问
DFS(u, 1); //访问u和u所在的连通块,1表示初始为第一层
}
}
}
//邻接表版
vector<int> Adj[MAXV]; //图G的邻接表
int n_; //n_为顶点数
bool vis_[MAXV] = {false}; //如果顶点i已被访问,则vis_[i] == true
void DFS_(int u, int depth){ //u为当前访问的顶点标号,depth为深度
vis_[u] = true; //设置u已被访问
for(int i = 0; i < Adj[u].size(); i++){ //对从u出发可以到达的所有顶点v
int v = Adj[u][i];
if(vis_[v] == false){ //如果v未被访问
DFS_(v, depth + 1); //访问v,深度加1
}
}
}
void DFSTrave_(){ //遍历图G
for(int u = 0; u < n_; u++){ //对每个顶点u
if(vis_[u] == false){ //如果u未被访问
DFS_(u, 1); //访问u和u所在的连通块,1表示初始为第一层
}
}
}
int main(){
return 0;
}
图的DFS
最新推荐文章于 2024-07-05 00:37:40 发布