作家
登录

数据结构与算法–图论之寻找连通分量、强连通分量

作者: 来源: 2017-11-14 17:21:22 阅读 我要评论

int v, int u) { 
  •         // 将刚拜访到的顶点设置标记 
  •         marked[v] = true
  •         // 大年夜v的所有邻居点中选择一个没有被拜访过的顶点 
  •         for (int w : graph.adj(v)) { 
  •             if (!marked[w]) { 
  •                 dfs(graph, w, v); 
  •             } else if (w != u) { 
  •                 hasCycle = true
  •             } 
  •         } 
  •     } 
  •  
  •     public boolean hasCycle() { 
  •         return hasCycle; 
  •     } 
  • 稍微修改了下DFS算法,新增了一个参数u,表示上一个被拜访的顶点。断定是否有环,关键就是那句else if (w != u)。留意是w和u比较。为什么如许就能断定有环了呢?如不雅当前拜访的顶点v的┞封个邻居点w是之前已经拜访过的,且不是上一个拜访的顶点,那么该无向图就有环。也就是下钤记种情况。

    数据构造与算法–图论之寻找连通分量、强连通分量

    w已经被拜访过且w == u的情况,无环。也就是下图的情况

    数据构造与算法–图论之寻找连通分量、强连通分量

    如不雅大年夜左边的强连通分量中随便率性一?顶点开端DFS,那么只需一次调用就能拜访到图中所有顶点,这主如果因为两个连通分量之间A2指向B3;相反,大年夜右边的强连通分量中随便率性一?顶点出发深度优先搜刮,须要调用DFS两次——这正好是强连通分量的个数,并且每一次调用DFS拜访的顶点就是一个强连通分量中的所有顶点(先假设这句话是精确的,下面会给出这个命题的证实),比如第一次调用DFS,拜访了B3、B4、B5,这三个顶点正好构成右边强连通分量的所有顶点。反过来想,为了找出全部的强连通分量,包管DFS拜访顶点的次序为B强连通分量中随便率性一?顶点在A强连通分量全部顶点之前即可。或者换个角度思虑,将连通分量缩小成顶点后,全部图变成了无环图,DFS拜访顶点的次序是:先拜访那些不指向任何连通分量(顶点)的顶点,比瘸琅绫擎A2指向B3,所以应当先拜访B中的顶点。说得更通俗点也就是,DFS将先拜访出度为0的那些连通分量(算作一个顶点),如许能包管一次调用DFS肯定是在同一个连通分量琅绫擎递归,不会跑到其他连通分量中取。如不雅先拜访那些指向了其他分量(出度不为0)的分量,DFS必定能进入到其他连通分量中,如A连通分量经由过程A2进入到B连通分量中,如许的话,一次DFS遍历了多个强连通分量,根本就达不到目标。

    寻找有向图的强连通分量

    在一幅有向图中,如不雅两个顶点v和w是互相可达的,则称它们是强连通的。如不雅一幅有向图中随便率性两个顶点都是强连通的,那么这幅图也是强连通的。

    有向环和强连通有着慎密的关系,两个顶点是强连通的当且仅当它们都在一个通俗的有向环中。这很轻易懂得,存在v -> w的路径,也存在w -> v的路径,则v和w是强连通的,同时也说清楚明了这是一个环构造。一个含有V个顶点的有向图,含有的强连通分量的个数范围为[1, V]——强连通图只有一个强连通分量,而一个有向无环图中则含有V个强连通分量。

    下图中就含有5个强连通分量。

    数据构造与算法–图论之寻找连通分量、强连通分量

    和计算无向图中的连通分量一样,计算有向图的强连通分量也是深度优先搜刮的一个应用。只需在膳绫擎代码的基本上加上几行,即可实现这个称为Kosaraju的算法。


      推荐阅读

      40岁的IT巨人微软 究竟是什么在支撑着它继续前进?

    Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 上周,微软颁布了其2018财年第一季度的财报。毫无不测埠,微软在这一季度大年夜赚了一笔。微软颁布财报后>>>详细阅读


    本文标题:数据结构与算法–图论之寻找连通分量、强连通分量

    地址:http://www.17bianji.com/lsqh/38858.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)