tarjan的算法精髓就是dfn[]和low[]数组

dfn[i]表示在该节点被搜索的次序(时间戳)

low[i]表示i或i的子树可以追溯到的最早的栈中节点

判断有强连通分量的条件就是

dfn[i]==low[i] 此时就可以判断i或i的子树是一个强联通分量

那么tarjan的算法过程是什么呢?

大致如下:
从某一个节点开始,如果该节点还未入栈,那么它的dfn[i]=i;low[i]=i;

如果已经入栈了,那么它的low[i]就是当前该节点入栈时dfn[i]的值,而不是现在i的值。

如果想要更加准确的理解tarjan,那么我推荐一篇大佬的博客

链接如下,里面清晰的解释了tarjan的算法原理,我就是通过这个大佬的博客学会的tarjan (代码也是copy的这位大佬的)

http://www.cnblogs.com/shadowland/p/5872257.html

博客名字叫:

Tarjan 算法&模板

来自:

struct Edge大佬的博客

下面是代码:

void Tarjan ( int x ) {dfn[ x ] = ++dfs_num ;low[ x ] = dfs_num ;vis [ x ] = true ;//是否在栈中stack [ ++top ] = x ;for ( int i=head[ x ] ; i!=0 ; i=e[i].next ){int temp = e[ i ].to ;if ( !dfn[ temp ] ){Tarjan ( temp ) ;low[ x ] = gmin ( low[ x ] , low[ temp ] ) ;}else if ( vis[ temp ])low[ x ] = gmin ( low[ x ] , dfn[ temp ] ) ;}if ( dfn[ x ]==low[ x ] ) {//构成强连通分量vis[ x ] = false ;color[ x ] = ++col_num ;//染色while ( stack[ top ] != x ) {//清空color [stack[ top ]] = col_num ;vis [ stack[ top-- ] ] = false ;}top -- ;}
}

感谢大佬,向大佬低头。

//其实就是我不想把图片复制过来而已【微笑】

转载于:https://www.cnblogs.com/ZDHYXZ/p/7651327.html

一直想写的关于tarjan算法的理解——向struct edge大佬低头相关推荐

  1. 关于tarjan算法

    tarjan算法其实是在dfs基础上维护一个标志值来判断当前点是否是某种特殊点,而学习tarjan算法,通过tarjan的DEPTH-FIRST SEARCH AND LINEAR GRAPH ALG ...

  2. Tarjan算法详解(AcWing 1174 受欢迎的牛)

    题目描述: 每一头牛的愿望就是变成一头最受欢迎的牛. 现在有 N 头牛,编号从 1 到 N,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎. 这种关系是具有传递性的,如果 A 认为 B ...

  3. 『Tarjan算法 无向图的双联通分量』

    无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...

  4. 【原创】tarjan算法初步(强连通子图缩点)

    [原创]tarjan算法初步(强连通子图缩点) tarjan算法的思路不是一般的绕!!(不过既然是求强连通子图这样的回路也就可以稍微原谅了..) 但是研究tarjan之前总得知道强连通分量是什么吧.. ...

  5. 超详细Tarjan算法总结,求强连通分量,割点,割边,有重边的割边

    Tarjan是一个人,他一身中发明了很多算法,就这几个算法最为出名. 1.求有向图的强连通分量,那么什么是强连通分量呢,就是一个顶点集合,任意两个顶点间都可以互相到达.一个顶点也是强联通分量如果图中任 ...

  6. Tarjan算法_缩点

    我们这一篇是在已经了解Tarjan算法的基础之上开始写的,如果不了解的话,请先看大牛们关于Tarjan算法的博客. 首先我们先看一下一个问题:一个有向图,有n个点以及m条边,我们至少应该添加几条边才能 ...

  7. Tarjan算法及其引申

    位于NOI考纲提高组的[7]级算法 [7]求强联通分量算法 [7]强连通分量的缩点算法 [7]求割点.割边算法 认识Tarjan算法 一种由Robert Tarjan提出的求解有向图强连通分量的线性时 ...

  8. Tarjan算法求无向图割边割点、最近公共祖先的总结

     无向图tarjan求割边割点.最近公共祖先总结 割点:删除这个点之后整个图变成不连通的两个部分的点 割点集合:在一个无向图中删除该集合中的所有点,能使原图变成互不相连的连通块的点的集合 点连通度 ...

  9. tarjan算法(强连通分量与割点)

    tarjan算法可以求有向图的割点割边强连通分量(还有一些奇奇怪怪的操作) 我只会割点和强连通分量,割边(和缩点)以后可能会加,如果是来看割边的话,现在跑还来得及.. (先来一张有向图叭) 用这张图, ...

  10. 0x66.图论 - Tarjan算法与无向图连通性

    目录 一.无向图的割点与桥 割点 桥/割边 时间戳 搜索树 追溯值 二.割边判定法则 三.割点判定法则 1.luogu P3388 [模板]割点(割顶) 2.luogu P3469 [POI2008] ...

最新文章

  1. 人是被经验塑造的动物,一家公司也是
  2. JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
  3. OpenGL ES之着色语言GLSL的使用说明及API
  4. DeepEarth更新到Silverlight 4了
  5. 微信支付接口开发过程
  6. jenkins~集群分发功能的具体实现
  7. 国科大高级人工智能10-强化学习(多臂赌博机、贝尔曼)
  8. 利用ziparchive压缩文件、zip_file解压文件
  9. Visual C++ 6.0下载安装及编写第一个C程序
  10. PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
  11. Python实现社交网络可视化
  12. [网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
  13. Flutter水波纹效果
  14. python实现目标检测voc格式标签数据增强
  15. 手术麻醉信息管理系统源码,生成规范麻醉文书,自动信息采集
  16. python 离线安装驱动
  17. MySQL-备份恢复
  18. 动态时间规整算法: 从DTW到FastDTW
  19. 生活多快乐:笑死爹的程序段子
  20. 简单响应式Bootstrap框架中文官网页面模板

热门文章

  1. Android中关于涉及到金钱计算方面的工具类!
  2. 基于servlet+jsp 个人博客系统
  3. redis 学习曲线及记录笔记
  4. 深度学习在训练时对图片随机剪裁(random crop)
  5. 微分与导数之一,切线
  6. 你的人生经验,究竟是在帮你,还是在毁你?
  7. 设计模式---003代理模式(转载自我的老师 Alley-巷子)
  8. 计算机考研复习资料推荐(转载)
  9. 《全程软件测试第三版》读书笔记
  10. 批量转换文件编码(By notepad++)