博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无向图的强连通分量
阅读量:4332 次
发布时间:2019-06-06

本文共 924 字,大约阅读时间需要 3 分钟。

 

本篇博客存在非常大的概念上的错误(算法没有错误)

更正的版本在这里

http://www.cnblogs.com/zwfymqz/p/8480552.html

http://www.cnblogs.com/zwfymqz/p/8480429.html

对此,我表示深深地抱歉

 

 

 

 

在学习无向图的强联通分量之前

你首先要明白 

 

以前的自己too naive ,这玩意儿其实叫边双联通分量QWQ。。

 

定义

对于任意两个点,如果存在至少两条互相不重合的路径,使得这两点可以相互到达,那么这两个点就属于同一个强联通分量

比如说

 

 

 在这张图中,

$1,2,3$属于一个强联通分量

$4$属于一个强联通分量,因为$3,4$只有一条可以相互到达的路径

 

 

实现

和有向图的强联通分量类似

都是用Tarjan算法实现

在求无向图的强联通分量重,我们不允许走已经走过的边

所以我们在Tarjan的过程中还需要记录一个father

走的时候只能走目标节点不是father的点

int Tarjan(int now,int fa){	dfn[now]=low[now]=++tot;	vis[now]=1;	s.push(now);	for(int i=head[now];i!=-1;i=edge[i].nxt)	{		if(dfn[edge[i].v]==0)				Tarjan(edge[i].v,now),low[now]=min(low[now],low[edge[i].v]);		else if(vis[edge[i].v]&&edge[i].v!=fa)				low[now]=min(low[now],dfn[edge[i].v]);	}	if(dfn[now]==low[now])	{		int top;		++colornum;		do		{			top=s.top();	color[top]=colornum;			vis[top]=0;	s.pop();		}while(top!=now);	}}

 

 

例题

放一道我们考试的题目

  

向下翻到第三题

 

 

 

 

 

转载于:https://www.cnblogs.com/zwfymqz/p/7800271.html

你可能感兴趣的文章
MySQL存储过程定时任务
查看>>
Python中and(逻辑与)计算法则
查看>>
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
音视频处理
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
Java clone() 浅拷贝 深拷贝
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
关于jquery中prev()和next()的用法
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>