图的遍历程序模板--DFS

来源:互联网 发布:python json解析 编辑:程序博客网 时间:2024/06/16 00:52

图的遍历程序模板–DFS

//图的遍历:DFS 和  BFS//DFS  伪代码模板//访问顶点u DFS(u){    vis[u]=true;        //设置u已被访问    //访问从u出发可以到达的所有顶点v     for(从u出发能到达的所有顶点v)    {        //如果v未被访问         if( vis[v] == false  )        {            //递归访问v             DFS(v);        }    }}//遍历图G DFS_traverse(G){    //对G的所有顶点u     for(G的所有顶点u)     {        //如果u未被访问        if( vis[u] == false  )         {            //访问u所在的连通块             DFS(u);        }    }}//以下是具体实现模板://邻接矩阵版const int MAXV =1000;   //最大顶点数const int INF=1000000000;   //设INF为一个很大的数//n为顶点数,MAXV为最大顶点数 int n,G[MAXV][MAXV];//如果顶点i已被访问,则vis[i]=true.初值为falsebool vis[MAXV]={false};//u为当前访问的顶点标号,depth为深度 void DFS(int u,depth) {    //设置u已被访问     vis[u]=true;    //如果需要对u进行一些操作,可以在这里进行    //下面对所有从u出发能到达的分支顶点进行枚举    //对每个顶点v     for(int v=0;v<n;v++)     {        //如果v未被访问,且u可以到达v         if( vis[v] == false  && G[u][v]!=INF )        {            //访问v,深度加1             DFS(v,depth+1);        }     }}//遍历图G void DFS_traverse() {    //对每个顶点u    for(int u=0;u<n;u++)     {        //如果u未被访问        if( vis[u] == false )         {            //访问u和u所在的连同块,1表示初始为第1层            DFS(u,1);         }    }}//邻接表版 const int MAXV =1000;   //最大顶点数const int INF=1000000000;   //设INF为一个很大的数//图G的邻接表 vector<int>  adj[MAXV];//n为顶点数,MAXV为最大顶点数int n;//如果顶点i已被访问,则 vis[i]=true.初值为falsebool vis[MAXV]={false};void DFS(int u,int depth) {    //设置u已被访问     vis[u]=true;    //如果需要对u进行一些操作,可以在此处进行    for(int i=0;i<adj[u].size();i++ )     {        int v=adj[u][i];        //如果v未被访问         if(vis[v] == false )        {            //访问v,深度加1             DFS(v,depth+1);        }    }}//遍历图G void DFS_traverse() {    for(int u=0;u<n;u++)    {        if(vis[u] == false  )        {            //访问u和u所在的连通块,1表示初始为第1层             DFS(u,1);        }    }}
原创粉丝点击