一直想写的关于tarjan算法的理解——向struct edge大佬低头
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大佬低头相关推荐
- 关于tarjan算法
tarjan算法其实是在dfs基础上维护一个标志值来判断当前点是否是某种特殊点,而学习tarjan算法,通过tarjan的DEPTH-FIRST SEARCH AND LINEAR GRAPH ALG ...
- Tarjan算法详解(AcWing 1174 受欢迎的牛)
题目描述: 每一头牛的愿望就是变成一头最受欢迎的牛. 现在有 N 头牛,编号从 1 到 N,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎. 这种关系是具有传递性的,如果 A 认为 B ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- 【原创】tarjan算法初步(强连通子图缩点)
[原创]tarjan算法初步(强连通子图缩点) tarjan算法的思路不是一般的绕!!(不过既然是求强连通子图这样的回路也就可以稍微原谅了..) 但是研究tarjan之前总得知道强连通分量是什么吧.. ...
- 超详细Tarjan算法总结,求强连通分量,割点,割边,有重边的割边
Tarjan是一个人,他一身中发明了很多算法,就这几个算法最为出名. 1.求有向图的强连通分量,那么什么是强连通分量呢,就是一个顶点集合,任意两个顶点间都可以互相到达.一个顶点也是强联通分量如果图中任 ...
- Tarjan算法_缩点
我们这一篇是在已经了解Tarjan算法的基础之上开始写的,如果不了解的话,请先看大牛们关于Tarjan算法的博客. 首先我们先看一下一个问题:一个有向图,有n个点以及m条边,我们至少应该添加几条边才能 ...
- Tarjan算法及其引申
位于NOI考纲提高组的[7]级算法 [7]求强联通分量算法 [7]强连通分量的缩点算法 [7]求割点.割边算法 认识Tarjan算法 一种由Robert Tarjan提出的求解有向图强连通分量的线性时 ...
- Tarjan算法求无向图割边割点、最近公共祖先的总结
无向图tarjan求割边割点.最近公共祖先总结 割点:删除这个点之后整个图变成不连通的两个部分的点 割点集合:在一个无向图中删除该集合中的所有点,能使原图变成互不相连的连通块的点的集合 点连通度 ...
- tarjan算法(强连通分量与割点)
tarjan算法可以求有向图的割点割边强连通分量(还有一些奇奇怪怪的操作) 我只会割点和强连通分量,割边(和缩点)以后可能会加,如果是来看割边的话,现在跑还来得及.. (先来一张有向图叭) 用这张图, ...
- 0x66.图论 - Tarjan算法与无向图连通性
目录 一.无向图的割点与桥 割点 桥/割边 时间戳 搜索树 追溯值 二.割边判定法则 三.割点判定法则 1.luogu P3388 [模板]割点(割顶) 2.luogu P3469 [POI2008] ...
最新文章
- 人是被经验塑造的动物,一家公司也是
- JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
- OpenGL ES之着色语言GLSL的使用说明及API
- DeepEarth更新到Silverlight 4了
- 微信支付接口开发过程
- jenkins~集群分发功能的具体实现
- 国科大高级人工智能10-强化学习(多臂赌博机、贝尔曼)
- 利用ziparchive压缩文件、zip_file解压文件
- Visual C++ 6.0下载安装及编写第一个C程序
- PL/SQL中导出整个表、表结构、部分数据、以及导入整个表
- Python实现社交网络可视化
- [网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
- Flutter水波纹效果
- python实现目标检测voc格式标签数据增强
- 手术麻醉信息管理系统源码,生成规范麻醉文书,自动信息采集
- python 离线安装驱动
- MySQL-备份恢复
- 动态时间规整算法: 从DTW到FastDTW
- 生活多快乐:笑死爹的程序段子
- 简单响应式Bootstrap框架中文官网页面模板