• 图的深度优先遍历DFS


    图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件不满足后,我们就return,回到上一层,换个方向继续遍历。

    模板:

     1 //邻接矩阵存储方式
     2 bool visited[MAX];
     3 void dfs(MGraph G,int i)
     4 {
     5     int j;
     6     visited[i]=true;
     7     cout<<G.vex[i]<<endl;  //这个只是进行的操作而已
     8     for(j=0;j<G.numVertexes;j++)
     9         if(G.arc[i][j]==1&&!visited[j])
    10             dfs(G,j);
    11 }
    12 
    13 void init(MGraph G)
    14 {
    15     int i;
    16     for(i=0;i<G.numVertexes;i++)
    17         visisted[i]=false;   //初始化
    18     for(i=0;i<G.numVertexes;i++)
    19         if(!visited[i])
    20             dfs(G,i);
    21 }

    如果存储方式为邻接表的话,只是改变了寻找下一个节点的方式而已。

    效率问题:邻接表结构适合点多边少的稀疏图,然后邻接矩阵,因为是二维数组,要查找每个顶点的邻接点需要访问矩阵中的所有元素,因此需要O(n^2)的时间

  • 相关阅读:
    SEO
    Hack写法
    文学漫步
    [BZOJ4565] [Haoi2016] 字符合并
    [bzoj 3123][Sdoi2013]森林
    [UVA 12633] Super Rooks on Chessboard FFT+计数
    [HDU4609] 3-idiots FFT+计数
    [bzoj4554] [Tjoi2016&Heoi2016]游戏
    [bzoj4556] [Tjoi2016&Heoi2016]字符串
    [bzoj4552][Tjoi2016&Heoi2016]排序
  • 原文地址:https://www.cnblogs.com/jhldreams/p/3775378.html
Copyright © 2020-2023  润新知