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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

对用2遍dfs求有向图强连通分量的理解

發布時間:2024/4/17 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对用2遍dfs求有向图强连通分量的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一遍dfs是對原圖進行,求出每個結點的后序遍歷順序,也叫時間戳,注意保存方式,應該是保存每個時間點的訪問的結點,而不是保存每個結點的訪問時間;
第二遍dfs是對逆圖進行,根據第一遍dfs的結果,首先在逆圖上從時間戳最大的結點開始dfs,可以得到第一個強連通分量,將遍歷過的結點標記,然后從下一個時間戳最大的且尚未標記的結點開始dfs,可以得到第二個強連通分量,以此類推,直到所有結點都確定其所在的強連通分量,此時算法結束。

首先分析由此算法得到的第一個強連通分量的正確性,易知時間戳最大的是有向圖的根結點:
1、從根結點出發,可以到達所有結點;
2、第二遍dfs是在逆圖上進行的,所以第二遍dfs得到的是所有能到達根結點的結點。
由以上2點和強連通分量的定義可知,第二遍dfs得到的確實是根結點所在的強連通分量。

然后考慮將第一個強連通分量所包含的結點從原圖中去掉(標記),則得到一個有向圖的森林(可能含有多個根結點),時間戳最大的結點是森林中的某個根結點,問題轉化為以上討論過的形式,在此不再重復。

以上所說的“從根結點出發,可以到達所有結點”其實是有問題的……
另一種稍微嚴謹的分析:
首先證明一個結論:若從時間戳較小的結點a出發可以到達時間戳較大的結點b,那么從結點b出發一定可以到達結點a

反證法:假設a的后序遍歷時間戳<b的時間戳,從a可達b,但從b不可達a,則該圖至少有2個強連通分量,第一遍dfs存在2中情況:
情況1:a所在的強連通分量在第一遍dfs時先于b所在的強連通分量,由于a可達b,所以b的后序遍歷時間戳將小于a的時間戳,與條件矛盾;
情況2:b所在的強連通分量在第一遍dfs時先于a所在的強連通分量,由于b不可達a,所以b的后序遍歷時間戳將小于a的時間戳,與條件矛盾。

終上所述,結論得證。

有了以上結論,第二遍dfs就好理解了,第二遍dfs是從當前時間戳最大的結點開始的,且是對逆圖進行dfs,所以找到的都是時間戳小于當前結點的且在原圖上能到達當前結點的所有結點,根據以上結論,所以當前結點能到達所有這些找到的結點,所以就找到了當前結點所在的強連通分量所含的結點。

轉載于:https://www.cnblogs.com/algorithms/archive/2012/07/05/2577596.html

總結

以上是生活随笔為你收集整理的对用2遍dfs求有向图强连通分量的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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