问题
分别用邻接表和邻接矩阵实现图的DFS算法
邻接矩阵
//邻接矩阵版本
int n,G[maxn][maxn];
bool vis[maxn] = {false};
void DFS(int u,int depth){ //u为当前访问的顶点编号,depth为深度
vis[u] = true;
//如果需要对 u 进行一些操作,可以在这里进行
//下面对所有从 u 出发能到达的顶点进行枚举
for (int v = 0; v < n; ++v) {
if (vis[v] == false && G[u][v]!=INF){ //如果 v 未被访问,且 u 可到达 v
DFS(v,depth+1);
}
}
}
void DFSTrave(){
for (int u = 0; u < n; ++u) {
if(vis[u] == false){
DFS(u,1);
}
}
}
邻接表
//邻接表版本
vector<int> Adj[maxn];
void DFS1(int u,int depth){
vis[u] = true;
for (int i = 0; i < Adj[u].size(); ++i) {
int v = Adj[u][i];
if(vis[v] == false){
DFS1(v,depth+1);
}
}
}
void DFSTrave1(){
for (int u = 0; u < n; ++u) {
if (vis[u] == false){
DFS1(u,1);
}
}
}