zoukankan      html  css  js  c++  java
  • 图的深度优先遍历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)的时间

  • 相关阅读:
    经典测试面试题一
    自定义函数实现字符串数组互转
    php 实现密码错误三次锁定账号10分钟
    HTTP状态码
    Linux知识点
    慢查日志
    curl 采集
    HTTP协议
    docker配置
    mysql数据库索引、存储引擎、事务
  • 原文地址:https://www.cnblogs.com/jhldreams/p/3775378.html
Copyright © 2011-2022 走看看