日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强连通分量(Strongly_Connected_Components)

發布時間:2024/10/5 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强连通分量(Strongly_Connected_Components) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基本概念

強連通圖(Strongly Connected Graph)是指在有向圖G中,如果對于每一對vi、vj,vi≠vj,從vi到vj和從vj到vi都存在路徑,則稱G是強連通圖。

有向圖中的極大強連通子圖稱做有向圖的強連通分量。

連通分量:對于圖G來的一個子圖中,任意兩個點都可以彼此到達,這個子圖就被稱為圖G的連通分量(一個點就是最小的連通分量)

最大連通分量:對于圖G的一個子圖,這個子圖為圖G的連通分量,且是圖G所有連通分量中包含節點數最多的那個,即為G的最大聯通分量

時間戳:搜索時第幾個搜索到這個點。

二、定理

定理:一個有向圖G是強連通的,當且僅當G中有一個回路,它至少包含每個節點一次。

證明:

(1)充分性:如果G中有一個回路,它至少包含每個節點一次,則G中任兩個節點都是互相可達的,故G是強連通圖。

(2)必要性:如果有向圖是強連通的,則任兩個節點都是相互可達。故必可做一回路經過圖中所有各點。若不然則必有一回路不包含某一結點v,并且v與回路上的個節點就不是相互可達,與強連通條件矛盾?。

三、算法

(1)Tarjan 算法

思想:

low,dfn。dfn表示這個點的時間戳,而low代表這個點所能到達的最小的時間戳,開始low都等于dfn,但會經過不斷更新而減少。

從1節點進行深度優先搜索,途中用樹(一個轉化為棧的樹)維護。

當遇到一個點時,有如下判斷:

1、如果這個點沒有訪問過,就將這個點加入樹(棧)

2、如果這個點訪問過,且在樹(棧)里,與這個點的low比較,更新自己的low

返回時更新low

當一個點遍歷所有的邊后這個點的low還是等于dfn,將個點及以上出棧,這個點及棧以上的點構成一個連通分量。

偽代碼:

void tarjan(int 當前點) {這個點的low=dfn=時間戳;將這個點入棧;標記這個點入棧;枚舉這個點連接的所有邊{如果目標點沒有被訪問過{tarjan(目標點);更新當前點的low; } 如果目標點被訪問過{更新當前點的low; } }如果當前點的low==dfn{將這個點及棧以上的點出棧,標記成一個強連通分量; ans++; } }

C++版本一

//in:時間戳下標//dfn[i]:i節點的時間戳//low[i]:i所能到達的最小的時間戳//vis[i]:i是否在棧里//head[i],next[i],to[i]:鄰接表 void tarjan(int u) {in++;dfn[u]=in;low[u]=in;S.push(u);vis[u]=1;for(int e=head[u];e;e=next[e]){if(!dfn[to[e]]){tarjan(to[e]);low[u]=min(low[to[e]],low[u]);}else if(vis[to[e]])low[u]=min(low[u],dfn[to[e]]);}if(low[u]==dfn[u]){while(!S.empty() && S.top()!=u){vis[S.top()]=0;S.pop(); } vis[u]=0;S.pop();ans++;} }

?

?

(2)Korasaju 算法

?

?

四、例題

https://www.luogu.org/problemnew/show/P1726(題解:https://blog.csdn.net/weixin_43272781/article/details/89790404)

五、參考資料

https://www.cnblogs.com/five20/p/7594239.html

https://www.cnblogs.com/shadowland/p/5872257.html?

總結

以上是生活随笔為你收集整理的强连通分量(Strongly_Connected_Components)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。