今天是比较正经的图遍历,纯粹的只讲怎么遍历一张图,DFS_study讲的是用DFS的思想去解决问题(一次性探索一条路径到底的思想)
const int INF=0x7fffffff;
int n,G[maxn][maxn];//n为顶点数,maxn为最大顶点数
bool v[maxn]={false};//如果顶点i已经被访问,则v[i]=true;
void DFS(int u,int depth)
{
v[u]=true;//设置u已经被访问
//可以在这里对u进行一些操作
//然后对所有从u出发能到达的分支顶点进行枚举
for(int v=0;v<n;v++)//对每个顶点v
{
if(v[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(v[u]==false)//如果u没有被访问
DFS(u,1);//访问u和u所在的联通块,1表示初始为第一层
}
//深度优先遍历,邻接表
vector<int> adj[maxn];
void DFS(int u,int depth)
{
v[u]=true;
for(int i=0;i<adj[u].size();i++)
{//对从u出发可以到达的所有顶点v
if(v[v]==false)
DFS(v,depth+1);
}
}
void DFSTrave()
{
for(int u=0;u<n;u++)
if(v[u]==false)
DFS(u,1);
}