好久没写博客了(都怪作业太多,绝对不是我玩的太嗨了)

所以今天要写的是一个高大上的东西:强连通

首先,是一些强连通相关的定义  //来自度娘

1.强连通图(Strongly Connected Graph)是指在有向图G中,如果对于每一对vi、vj,vi≠vj,从vi到vj和从vj到vi都存在路径,则称G是强连通图。

2.有向图的极大强连通子图,称为强连通分量(strongly connected components)。

当然,看定义是肯定看不懂的,所以,我举个栗子说明一下

我们以下图为例,这是一个特别经典的强连通图,三个被框起来的地方就分别是三个强连通分量

我们DFS一下,从一出发,我们从右至左遍历,所以路径便是1——>3——>5——>6,到了6,我们发现无路可走了,就回到5,而6不能到达任何一个点,所以它独自为一个强连通分量。同理,5也是一个强连通分量。而1——>3——>4——>1——>2,可以互相到达,所以这又是一个强连通分量。

Tarjan算法

接下来,就是一个在强连通中,常用的一个算法。

Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。

定义DFN(u)为节点u搜索的次序编号(时间戳),Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号。

当DFN(u)=Low(u)时,以u为根的搜索子树上所有节点是一个强连通分量。

接下来演示一下算法:

从1开始DFS,把遍历到的节点加入栈中。搜索到节点u=6时,DFN[6]=LOW[6],找到了一个强连通分量。退栈到u=v为止,{6}为一个强连通分量。

返回到5,发现DFN[5]=LOW[5],退栈后{5}为一个强连通分量。

继续回到1,最后访问2。访问边(2,4),4还在栈中,所以LOW[2]=DFN[4]=5。返回1后,发现DFN[1]=LOW[1],把栈中节点全部取出,组成一个连通分量{1,3,4,2}。

所以,三个强连通分量全部都找出来了。

模板如下:

 void Tarjan(int u){
dfn[u]=low[u]=++num;
st[++top]=u;
for (int i=fir[u]; i; i=nex[i]){
int v=to[i];
if (!dfn[v]){
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if (!co[v])
low[u]=min(low[u],dfn[v]);
}
if (low[u] == dfn[u]){
co[u]=++col;
while (st[top]!=u){
co[st[top]]=col;
--top;
}
--top;
}
}

最新文章

  1. Git 简介
  2. tableView:cellForRowAtIndexPath:方法中indexPath.row不是从0开始的,从4开始
  3. There is insufficient system memory to run this query 错误
  4. 移动端js写法
  5. 汽车驱动之家 http://bmw360.cn
  6. 关于F12的有效利用
  7. volatile 关键字
  8. Class文件结构
  9. Selenium 实现联想下拉框
  10. SVM的点滴
  11. drop,delete,truncate
  12. linux下修改.bash_profile立即生效的三种方法
  13. HTTP status codes
  14. Unity3d学习 基础-关于MonoBehaviour的生命周期
  15. MySql绿色版应用
  16. 【SSH系列】hibernate映射 -- 一对一双向关联映射
  17. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
  18. Centos7快速安装docker
  19. koa : Express出品的下一代基于Node.js的web框架
  20. centos7+apache+svn配置 踩坑,注意权限问题。apache应用目录checkout应用 必须用这个命令:svn co file:///home/svn/test/ test ,通过svn add * &&commit 及任意修改都是不行的

热门文章

  1. html地图定位
  2. TeamViewer如何绑定谷歌二次验证码/谷歌身份验证?
  3. Dart函数
  4. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘
  5. 面试题十八:在O(1)的时间内删除链表的节点
  6. Python编程导论第2版|百度网盘免费下载|新手学习
  7. python基础--14大内置模块(上)
  8. selenium 破解登录滑块验证码mu
  9. CSS样式基础2
  10. 《数据可视化之美》高清PDF全彩版|百度网盘免费下载|Python数据可视化