求强连通分量的tarjan算法

liumilan2011 2013-04-11 04:40:24
查了很多资料,tarjan算法中有个数组定义
Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号

这个数组定义应该怎么理解啊?实在没想明白?有人帮忙用简单明了的语言解释下吗?
...全文
210 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kosora曹 2013-05-20
  • 打赏
  • 举报
回复
个人觉得,求“强连通分量”的Kosaraju、Tarjan、Gabow都不是很好理解,不妨用这样的“蛮力法”,比如这个图:

1、对每个点进行DFS,放入二维数组array[6][6],得到:
1 2 4 6 3 5
2 4 6 1 3 5
3 5 6 4 1 2
4 1 3 5 6 2
5 6 - - - -
6 - - - - -
为了方便起见,下标从1开始。
2、对于某个行array[i],遍历它的所有元素,对于某个列下标j元素e,检测array[e]中是否含有i,如果不含有,则置array[i][j]为空,如果含有,则不做操作;例如,对于第一行array[1],对于array[1][2]=2,而array[2][4]=1,不处理,但对于array[1][4]=6,array[6]却不包含1,所以array[1][4]=-。最终得到:
1 2 4 - 3 -
2 4 - 1 3 -
3 - - 4 1 2
4 1 3 - - 2
5 - - - - -
6 - - - - -
这个二维数组,快接近最终结果了。
3、由于要得到“组合”,而不是“排列”,写个函数去掉“重复解”就可以得到三个强连通分量:
1 2 3 4
5
6
那闯 2013-04-28
  • 打赏
  • 举报
回复
如果low的值小于dfn(搜索的次序编号)的值,说明它或其子孙节点有边连到自己上方。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧