青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-24  文章-0  trackbacks-0
有向圖強連通分支就是這樣一個最大的頂點集合C,其中的任意一對頂點u和v,u可達v,并且v可達u。
kosaraju算法是求有向圖強連通分支的有效算法。起基本思想就是兩次DFS,說起來簡單,但是如何證明其兩次DFS是能成功求出強連通分支的呢?
1、對圖G第一次DFS遍歷完成之后,會形成若干個DFS樹,它們組成森林,假設有C1,C2,C3...Ck棵DFS樹,而且遍歷完成時間C1<C2<C3<...<Ck,這樣,可知必然不存在從Ci到Cj的邊(其中i<j),因為如果存在Ci->Cj則假設這條邊是從Ci的x節點到Cj的y節點,則由白色路徑定理可知,必然存在一條從Ci到Cj的白色路徑,則Cj會是Ci的一棵子樹!所以不存在從Ci到Cj的邊(其中i<j)。
2、當把圖G的所有邊逆向之后,設形成圖F,則由1可知不存在從Cj到Ci的路徑,這樣,對圖F按照第一次DFS遍歷時各個節點的完成時間由大到小進行DFS遍歷,即從Ck的樹根r開始遍歷:首先根據前面的論證需要明確一個事實,r所在的強連通分支的點集必然屬于樹Ck,因為不存在從Ck到Ca(a<k)的邊,另外就是r到Ck中所有節點都是可達的,這樣當對圖G的逆圖F從r點開始遍歷的時候,所有可到達的點在圖G中都是可到達r的!這樣遍歷結果就是r所在的強連通分支!然后在從剩下沒有遍歷過的所有節點中第一次DFS的完成時間最大的點開始遍歷,因為剩下的點都為白色(可能會存在白色點指向從r形成的強連通分支的反向邊),所以與Ck的根r類似,同樣能形成一個強連通分支,這樣就能把Ck中的所有強連通分支找出,同樣可以找出Ck-1...C1中的強連通分支。
證畢!
證明如果能看懂的話那代碼就非常簡單了,下面是示例代碼:
 1 #include <cstdio>
 2 #include <vector>
 3 
 4 #define MAXN 105
 5 #define ROOT 0
 6 
 7 typedef struct {
 8   std::vector<int> adj_list;
 9 #define WHITE 0
10 #define GREY 1
11 #define BLACK 2
12   int color;
13 } GRAPH;
14 
15 GRAPH graph[MAXN];
16 GRAPH rgraph[MAXN];
17 int nr_of_nodes = 0;
18 int nr_of_edges = 0;
19 
20 static void init() {
21   int i;
22   for (i = 0; i < MAXN; ++i) {
23     graph[i].adj_list.clear();
24     graph[i].color = WHITE;
25     rgraph[i].adj_list.clear();
26     rgraph[i].color = WHITE;
27   }
28   nr_of_nodes = 0;
29   nr_of_edges = 0;
30 }
31 
32 static void input() {
33   int i, u, v;
34   freopen("input""r", stdin);
35   scanf("%d%d"&nr_of_nodes, &nr_of_edges);
36   for (i = 0; i < nr_of_edges; ++i) {
37     scanf("%d%d"&u, &v);
38     graph[u].adj_list.push_back(v);
39     rgraph[v].adj_list.push_back(u);
40   }
41 }
42 
43 static void DFS(GRAPH* g, int x, std::vector<int>* list) {
44   int i;
45   g[x].color = GREY;
46   for (i = 0; i < g[x].adj_list.size(); ++i) {
47     if (g[g[x].adj_list[i]].color == WHITE) {
48       DFS(g, g[x].adj_list[i], list);
49     }
50   }
51   g[x].color = BLACK;
52   list->push_back(x);
53 }
54 
55 static void strong_connected_components() {
56   int i, j;
57   std::vector<int> vertexes
58   std::vector<int> scc;
59   std::vector<std::vector<int> > sccs;
60 
61   for (i = 0; i < nr_of_nodes; ++i) {
62     if (graph[i].color == WHITE) {
63       DFS(graph, i, &vertexes);
64     }
65   }
66 
67   for (i = vertexes.size() - 1; i >= 0--i) {
68     if (rgraph[vertexes[i]].color == WHITE) {
69       DFS(rgraph, vertexes[i], &scc);
70       sccs.push_back(scc);
71       scc.clear();
72     }
73   }
74 
75   for (i = 0; i < sccs.size(); ++i) {
76     printf("strong connected component %d: ", i);
77     for (j = 0; j < sccs[i].size(); ++j) {
78       printf("%d ", sccs[i][j]);
79     }
80     printf("\n");
81   }
82 }
83 
84 int main(int argc, const char **argv) {
85   init();
86   input();
87   strong_connected_components();
88   return 0;
89 }
90 
91 

核心部分代碼就是strong_connected_components()和DFS()。這里利用一個棧來保存每個節點的完成先后順序,第二次遍歷的時候就按照最后完成的節點開始向前遍歷。
posted on 2012-08-22 21:28 myjfm 閱讀(1138) 評論(0)  編輯 收藏 引用 所屬分類: 算法基礎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久综合网天天| 欧美xart系列高清| 韩国三级电影一区二区| 国产一区免费视频| 国内视频一区| 亚洲福利久久| 日韩一级片网址| 一区二区三区高清在线| 制服丝袜激情欧洲亚洲| 午夜精品福利视频| 久久免费国产| 99riav久久精品riav| 亚洲在线黄色| 免费日韩一区二区| 欧美日韩美女| 国产一级久久| 亚洲精品一区二区三区福利| 亚洲一区国产视频| 女仆av观看一区| 亚洲精品免费一区二区三区| 亚洲小说春色综合另类电影| 久久丁香综合五月国产三级网站| 欧美激情一区二区三区| 国产精品影视天天线| 亚洲电影免费在线观看| 亚洲欧美日韩精品久久久| 美女日韩欧美| 亚洲午夜视频在线| 男人插女人欧美| 国产欧美日韩伦理| 一本色道综合亚洲| 国产精品福利久久久| 国产主播精品在线| 亚洲综合导航| 亚洲美女视频| 欧美xart系列在线观看| 国产精品一区免费观看| 99pao成人国产永久免费视频| 久久精品日产第一区二区| 亚洲日本欧美日韩高观看| 久久亚洲图片| 激情综合久久| 久久精品二区| 在线一区二区三区四区| 欧美高清视频www夜色资源网| 国产中文一区二区| 久久成人综合视频| 亚洲一区免费网站| 欧美日韩一区国产| 日韩视频在线观看| 亚洲承认在线| 免费成人av在线| 久久久999精品免费| 国产亚洲永久域名| 久久国产精品第一页| 亚洲主播在线播放| 国产精品乱码| 国产麻豆午夜三级精品| 午夜久久久久久久久久一区二区| 99视频一区| 欧美手机在线| 午夜精品福利视频| 亚洲欧美视频在线| 国产精品综合| 久久免费观看视频| 玖玖综合伊人| 日韩手机在线导航| 一本久久综合| 国产精品有限公司| 美女久久网站| 欧美理论电影在线播放| 亚洲视频免费观看| 午夜老司机精品| 伊人成人在线视频| 最近中文字幕日韩精品| 欧美日韩国产高清| 亚洲欧美一区二区精品久久久| 亚洲一级黄色av| 国产一区二区三区四区| 欧美黄色小视频| 欧美日韩国产精品一区二区亚洲 | 欧美黑人多人双交| 亚洲午夜激情| 欧美一区二区大片| 影音先锋日韩精品| 亚洲茄子视频| 国产精品自拍一区| 欧美激情精品久久久久| 欧美色视频在线| 久久综合五月天婷婷伊人| 麻豆精品精品国产自在97香蕉| 欧美日韩精品不卡| 欧美在线二区| 免费成人毛片| 亚洲欧美日韩在线不卡| 久久久噜噜噜久久人人看| 一区二区三区鲁丝不卡| 午夜亚洲福利| 日韩一级黄色av| 久久精品女人的天堂av| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲激情影院| 亚洲一区二区av电影| 亚洲黄一区二区| 午夜精品久久久久久久久久久久久 | 亚洲片在线观看| 国产自产高清不卡| 一本色道久久综合亚洲精品婷婷| 在线观看欧美日韩| 一区二区高清视频| 亚洲日本国产| 久久久久欧美精品| 午夜久久tv| 欧美日韩亚洲三区| 亚洲国产精品久久91精品| 韩国成人福利片在线播放| 99精品99| 亚洲作爱视频| 免费在线观看精品| 久久综合伊人77777麻豆| 国产精品国产三级国产a| 亚洲高清av| 亚洲国产免费看| 久热精品视频在线观看| 久久久久亚洲综合| 国产亚洲激情| 午夜久久久久久久久久一区二区| 午夜精品国产更新| 国产精品人人做人人爽人人添| 一区二区三区高清在线| 亚洲午夜日本在线观看| 欧美日韩亚洲国产精品| 一区二区冒白浆视频| 亚洲一区二区三区在线观看视频| 欧美理论电影在线观看| 亚洲人成毛片在线播放女女| 日韩视频专区| 国产精品久久久久国产a级| 亚洲一区二区三区久久| 欧美亚洲网站| 国产一区白浆| 狂野欧美一区| 亚洲精品少妇网址| 亚洲午夜一级| 国产热re99久久6国产精品| 小黄鸭精品密入口导航| 久久精品欧美日韩| 亚洲国产精品va| 久久久蜜桃精品| 国产日韩在线看| 久久久美女艺术照精彩视频福利播放| 免费在线欧美黄色| 一本色道久久综合| 欧美在线91| 国产午夜一区二区三区| 在线综合亚洲欧美在线视频| 欧美亚洲日本一区| 亚洲成人影音| 欧美日韩一区二区三区免费看| 亚洲小说区图片区| 久久久久久亚洲精品杨幂换脸| 亚洲国产高清视频| 国产精品成人免费| 久久久久久9| 亚洲精品国产精品国产自| 午夜在线成人av| 亚洲黄色三级| 国产精品劲爆视频| 久久久亚洲精品一区二区三区| 亚洲精品精选| 久久久国产精品一区| 99这里只有久久精品视频| 国产色爱av资源综合区| 欧美精品一区二区三区高清aⅴ| 亚洲欧美bt| 亚洲三级电影在线观看| 久久一区激情| 性欧美精品高清| 亚洲免费观看高清在线观看| 国产婷婷色一区二区三区四区| 欧美精品一区二区三区在线播放| 久久久激情视频| 亚洲欧美经典视频| 日韩一级精品| 欧美国产专区| 卡一卡二国产精品| 校园春色综合网| 99精品视频免费| 亚洲高清二区| 狠狠色狠狠色综合日日tαg| 国产精品一区在线观看你懂的| 欧美精品在线观看一区二区| 毛片一区二区三区| 久久9热精品视频| 亚洲欧美另类中文字幕| 国内精品国产成人| 欧美日韩国产区| 欧美激情第9页| 欧美国产日韩一二三区| 男女视频一区二区|