邻接矩阵版
#include<iostream>
using namespace std;
const int MAXV = 1000;//最大顶点数
const int INF = 1000000000;//设INF为一个很大的数
int n=5;//n为顶点数,此处设为5,分别为0,1,2,3,4
int G[MAXV][MAXV] = {//存储图的邻接矩阵,MAXV为最大顶点数
{INF,1,INF,INF,INF},
{INF,INF,1,1,INF},
{INF,1,INF,1,1},
{1,1,1,INF,1},
{1,INF,1,1,INF}
};
bool vis[MAXV] = {false};//如果顶点i已被访问,则vis[i]==true。初值为false
void DFS(int u,int depth){//u为当前访问的顶点标号,depth为深度
vis[u] = true;//设置u已被访问
//如果需要对u进行一些操作,可以在这里进行
//下面对所有u出发能到达的分支顶点进行枚举
cout<<"顶点为"<<u<<" "<<"深度为"<<depth<<endl;//对u进行输出
for(int v=0;v<n;v++){//对每个顶点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表示初始为第一层
}
}
}
int main() {
DFS(2,1);
}
邻接表版
#include<iostream>
#include<vector>
using namespace std;
const int MAXV = 1000;//最大顶点数
int n;//n为顶点数
vector<int> Adj[MAXV];//图G的邻接表
bool vis[MAXV] = {false};//如果顶点i已被访问,则vis[i]==true。初值为false
void DFS(int u,int depth){//u为当前访问的顶点标号,depth为深度
vis[u] = true;//设置u已被访问
/*如果需要对u进行一些操作,可以在此处进行*/
for(int i=0;i<Adj[u].size();i++){//对从u出发可以到达的所有顶点v
int v = Adj[u][v];
if(vis[v] = false){//如果v未访问
DFS(v,depth+1);//访问v,深度加1
}
}
}
//遍历图G
void DFSTrave(){
for(int u=0;u<n;u++){//对每个顶点u
if(vis[u]==false){//如果u未被访问
DFS(u,1);//访问u和u所在的连通块,1表示初试为第一层
}
}
}
int main() {
DFS(0,1);//从顶点0开始深度优先遍历
}