`
Coco_young
  • 浏览: 119721 次
  • 性别: Icon_minigender_1
  • 来自: 湖南长沙
社区版块
存档分类
最新评论

求割点和桥的DFS

 
阅读更多
//无向图求割点和桥
void dfs(int cur,int fa,int deep,int &time)
{
	visit[cur] =  1;
	DFN[cur] = LOW[cur] = deep;
	int soncnt = 0;
	for(int i=0;i<g[cur].size();i++)
	{
		int v = g[cur][i];
		if(!vis[v])
		{
			soncnt++;
			dfs(v,cur,deep+1,time);
			LOW[cur] = MIN(LOW[cur],LOW[v]);
			if(cur!=ROOT&&LOW[v]>=DFN[cur])//割点
			{
				cutv[cur] = 1;
			}
			if(cur==ROOT&&soncnt>=2)//割点
			{
				cutv[cur] = 1;
			}
			if(LOW[v]>DFN[cur])//桥
			{
				Brige[cur][v] = 1;
			}
		}
		else if(v!=fa)
		{
			LOW[cur] = MIN(DFN[v],LOW[cur]);
		}
	}
	LEAVE[cur] = time++;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics