双DFS求强连通分量

原创 2015年07月07日 20:43:43
用双DFS实现强连通分量是3个方法中比较好理解的。注意事项:1.读入文件时,我用的是fstream,流的方式读入!2.如果是数据集中没有别的多余符号,可以直接读入。若是由逗号等符号分隔开,我用的是CString中的readstring来按行读入,需引入头文件.在按行截取,用到find()函数,TrimLeft()和TrimRight()函数!3.按行读入数据后建立正反两个邻接表!按头插法建立效率更高些!4.建立一个Graph类和Readfile类,其中Graph类中包含图的各种信息。Readfile类中有读文件的方法,使得调用这个方法后会产生一个Graph类对象,包含数据集的所有信息,即调用这个函数后我们把数据集转换成了一个Graph对象!5.其中一个较难点是输出结点的出栈顺序,我用了一个time变量的引用来记录每个结点的出栈时间!具体代码如下:这是读文件的代码,结果是产生一个图对象!这是第一次深度优先遍历,用&time来记录每个顶点的出栈时间:这是第二次深度优先遍历,输出各个强连通分量按行隔开!这是主程序,通过调用读文件函数生成一个图对象,在这个对象上分别进行两次DFS即可!
版权声明:本文为博主原创文章,未经博主允许不得转载。

双向dfs求强连通分量

1.以任意一个点为源点,进行dfs,并将记录经过点的时间戳,时间戳逐渐增加。 2.进行dfs后,将图中的边的方向反向。寻找时间戳最小的点为源点(就是上面源点)进行dfs。这时,它所能达到的点集就是一...

HDU - 3639 Hawk-and-Chicken(dfs+强连通分量)

题目大意:有N个人进行投票,想要选择出最受欢迎的人,投票的规则如下 1.不能投给自己 2.投票可以传递,比如A投给B一票,B投给C一票,那么C就得到了A的一票和B的一票问票数最多能得多少,得到最高...

求强连通分量的双DFS,Tarjan和Gobow算法详解

1.强连通分量-----双DFS算法思想:对一个有向图作两遍DFS,第一遍DFS能确定图中每个顶点的DFS完成时间,第二遍DFS从第一遍DFS完成时间的逆序开始遍历。 思想:对一个有向图作两...

用DFS和BFS求连通分量(邻接表的实现与应用)

深度优先搜索求连通分量(邻接表的实现与应用) 本文内容改编自《挑战程序设计竞赛(第2弹)》12.5节 问题描述给出朋友关系,判断从指定人物出发能否通过双向朋友链抵达目标人物。 输入 第...

【算法】图论(一) —— 基本图算法(BFS/DFS/强连通分量)

基本图算法(图的表示/广度优先搜索/深度优先搜索/拓扑排序/强连通分量)

hdu 3639 Hawk-and-Chicken 【强连通分量+反向建图dfs】

链接:http://acm.hdu.edu.cn/showproblem.php?pid=3639 题意:有n个人,m条边,每条边代表u给v投一票,票可以传递,比如A->B,B->C,这时C可以得到2...

HDU 3639 Hawk-and-Chicken 强连通分量分解 + dfs

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3639 题意:大概意思是n个人投票,求获胜者得到多少票,并输出所有获胜者,其中支持关系是可以传递的,即a...

DFS应用:图的拓扑排序以及Kosaraju强连通分量算法

图的DFS算法对于每一个图节点u有2个重要的时间d[u]和f[u],分别代表找到u的时间(其变为灰色节点的时间)以及u完成的时间(其变为黑色节点的时间). f[u]越大可能其在最上面(树根处),所以...

poj 2186 Popular Cows(强连通分量缩点+dfs)

题目链接: 点击打开链接 题目大意: 给出一些牛,他们之间有崇拜关系,且这种关系具有传递性,问被所有其他牛崇拜的牛的个数 题目分析: 首先对于这个有向图,它的所有强连通分量中的点都是互相...

【BZOJ1179】【Apio2009】Atm 强连通分量缩点+拓扑DP/拓扑最长路 kosaraju+tarjan+dfs转非递归三种代码

kosaraju、tarjan、kosaraju dfs转非递归,三种代码。。。 可以有效对付卡系统栈的管理员。。。...
  • Vmurder
  • Vmurder
  • 2015年01月10日 14:43
  • 1531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:双DFS求强连通分量
举报原因:
原因补充:

(最多只允许输入30个字)