無向圖的強連通分量


 

本篇博客存在非常大的概念上的錯誤(算法沒有錯誤)

更正的版本在這里

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);
	}
}

 

 

例題

放一道我們考試的題目

  

題解點這里
向下翻到第三題

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM