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

隨筆-80  評論-24  文章-0  trackbacks-0
不得不佩服Tarjan,果然是計算機領域的牛人
求無向圖割點的算法其實比較容易理解,《算法導論》上思考題22-2有關于割點的討論,其中有證明題:
1、如果對于無向連通圖的DFS得來的生成樹的根T是割點,當且僅當T至少有兩個子女;
2、如果對于無向連通圖的DFS得來的生成樹的非根V是割點,當且僅當在生成樹中V有一個孩子節點S,使得不存在從S或S的任何后裔節點指向V的某個真祖先頂點的反向邊;
其實粗略證明并不難:
證明1:1)若T是割點,假設T僅有一個孩子節點t,則當去掉T節點之后,原生成樹仍然為一顆樹,根節點為t,可知去掉T之后的圖仍然連通,與割點定義矛盾,因此如果T是割點,則T至少有兩個孩子節點成立;2)若T有至少兩個子女,則根據生成樹由DFS得到可知,在原圖中根節點的兩個子樹之間不存在連接邊,因此當去掉根節點T后,兩顆子樹不能通過增加邊形成一棵新的生成樹,成為兩棵獨立的生成樹,因此可知原圖不在連通,所以由割點定義知T為割點;證畢。
證明2:1)若非根V是割點,假設生成樹中V的所有孩子節點Si,使得任意Si及其Si的后裔節點都存在指向V的某個真祖先頂點的反向邊,那么,當去掉節點V之后,生成樹中V節點的子樹可以通過連接反向邊形成一棵新的生成樹,則原圖在去掉V節點后仍然連通,與V是割點矛盾,因此若對于無向連通圖的DFS得來的生成樹的非根V是割點,則在生成樹中V有一個孩子節點S,使得不存在從S或S的任何后裔節點指向V的某個真祖先頂點的反向邊成立;2)若在生成樹中V有一個孩子節點S,使得不存在從S或S的任何后裔節點指向V的某個真祖先頂點的反向邊,則生成樹中V的一孩子節點S為根的子樹,在去掉V節點之后不能通過增加指向真祖先頂點的方向邊形成一棵去掉V節點后的新圖的生成樹,則原圖在去掉V節點后成為不連通的圖,則V是割點,成立;證畢。

有了上面的理論保證,則求割點的算法就不難了:
1)對連通圖進行DFS,遍歷過程中記錄所有節點的深度值depth,并且對節點Vi記錄下Vi自身及其Vi所有子孫節點見過的深度最淺的深度值low(不包括節點本身的父節點);
2)如果Vi節點不為根節點,則如果Vi存在某個兒子節點,其見過的深度最淺的深度值要大于節點Vi的深度值,則Vi為割點;
3)如果Vi為根節點,則如果Vi有兩個及其以上的子女,則Vi為割點;

代碼如下:

  1 #include <cstdio>
  2 #include <vector>
  3 
  4 #define IntVector std::vector<int>
  5 #define min(x, y) ((x) > (y) ? (y) : (x))
  6 #define MAXN 105
  7 #define ROOT 1
  8 #define WHITE 0
  9 #define GREY 1
 10 #define BLACK 2
 11 
 12 struct Node {
 13   IntVector nbs;
 14   int parent;
 15   int depth;
 16   int low;
 17   int color;
 18 };
 19 
 20 Node node[MAXN];
 21 int flag[MAXN];
 22 int Nnode;
 23 int CPCount;
 24 int ChildrenOfRoot;
 25 
 26 void Init() {
 27   int i;
 28   for (i = 0; i < MAXN; ++i) {
 29     flag[i] = 0;
 30     node[i].nbs.clear();
 31     node[i].parent = -1;//父親節點
 32     node[i].depth = -1;//深度
 33     node[i].low = -1;//子孫節點見到的depth最小的節點號
 34     node[i].color = WHITE;
 35   }
 36   CPCount = 0;
 37   ChildrenOfRoot = 0;
 38 }
 39 
 40 void Output() {
 41   printf("%d\n", CPCount);
 42 }
 43 
 44 int TarjanDFS(int CurNode, int Parent, int Depth) {
 45   int i;
 46   node[CurNode].parent = Parent;
 47   node[CurNode].color = GREY;
 48   node[CurNode].depth = node[CurNode].low = Depth;
 49   for (i = 0; i < node[CurNode].nbs.size(); ++i) {
 50     if (node[CurNode].nbs[i] == Parent) {
 51       continue;
 52     }
 53     if (node[node[CurNode].nbs[i]].color == GREY) {
 54       node[CurNode].low = min(node[node[CurNode].nbs[i]].depth,
 55       node[CurNode].low);
 56     } else if (node[node[CurNode].nbs[i]].color == WHITE) {
 57       TarjanDFS(node[CurNode].nbs[i], CurNode, Depth + 1);
 58       node[CurNode].low = min(node[CurNode].low,
 59             node[node[CurNode].nbs[i]].low);
 60       if (CurNode == ROOT) {
 61         ChildrenOfRoot++;
 62       }
 63       if (CurNode != ROOT &&
 64             node[CurNode].depth <= node[node[CurNode].nbs[i]].low) {
 65         flag[CurNode] = 1;
 66       }
 67     }
 68   }
 69   node[CurNode].color = BLACK;
 70 }
 71 
 72 void FindCutPoint() {
 73   int i;
 74   TarjanDFS(1, 0, 1);
 75   for (i = 2; i <= Nnode; ++i) {
 76     if (flag[i] == 1) {
 77       CPCount++;
 78     }
 79   }
 80   if (ChildrenOfRoot > 1) {
 81     CPCount++;
 82   }
 83 }
 84 
 85 void Run() {
 86   int tmp1, tmp2;
 87   char ch;
 88   while (scanf("%d", &Nnode) && Nnode != 0) {
 89     Init();
 90     while (scanf("%d", &tmp1) && tmp1 != 0) {
 91       while (scanf("%d%c", &tmp2, &ch)) {
 92         node[tmp1].nbs.push_back(tmp2);
 93         node[tmp2].nbs.push_back(tmp1);
 94         if (ch == '\n') {
 95           break;
 96         }
 97       }
 98     }
 99     FindCutPoint();
100     Output();
101   }
102 }
103 
104 int main() {
105   Run();
106   return 0;
107 }
108 

核心代碼便是TarjanDFS函數,它有三個參數,代表當前遍歷的節點,該節點的父親節點,節點的深度值。其中每個節點都有一個顏色值來表示當前遍歷的狀態,如果節點還未被遍歷,則為WHITE,如果該節點已經被訪問,但是正在遍歷其孩子節點,則該節點為GREY,如果該節點及其所有孩子節點均被遍歷,則該節點被標記為BLACK;

求無向連通圖的割邊算法與割點很類似,割點是求孩子節點的low值是否大于等于該節點的depth,如果low[child] >= depth[V],則該點V為割點,如果low[child] > depth[v],則v-child連接的這條邊則為割邊。
posted on 2012-08-18 23:53 myjfm 閱讀(2916) 評論(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>
            欧美日韩国产一中文字不卡| 亚洲精品乱码久久久久久| 一区二区三区视频在线播放| 久久岛国电影| 亚洲欧美日韩高清| 亚洲色图制服丝袜| 一区二区三区免费观看| 亚洲精品乱码久久久久久蜜桃91| 激情六月综合| 国语自产在线不卡| 红桃视频国产一区| 国内精品亚洲| 黄色成人免费网站| 亚洲国产视频a| 亚洲精品日韩久久| 亚洲一区二区毛片| 久久久www免费人成黑人精品| 久久全国免费视频| 欧美电影免费观看高清| 欧美激情导航| 中文在线资源观看网站视频免费不卡| 亚洲一区二区毛片| 久久久精品网| 欧美伦理一区二区| 欧美日韩四区| 国产美女精品人人做人人爽| 激情综合五月天| 亚洲国产日韩一区| 亚洲自拍偷拍麻豆| 久久久久久久999精品视频| 欧美大秀在线观看| 一区二区三区www| 欧美亚洲专区| 欧美电影免费观看| 国产色产综合产在线视频| 亚洲高清不卡在线观看| 一区二区精品国产| 久久久www成人免费毛片麻豆| 亚洲国产精品一区| 中文精品在线| 另类图片综合电影| 国产精品久久久久久久7电影 | 鲁大师影院一区二区三区| 欧美 日韩 国产在线 | 久久综合九色综合久99| 最新国产の精品合集bt伙计| 销魂美女一区二区三区视频在线| 欧美国产一区视频在线观看| 国产精品五区| 一本久道久久综合中文字幕| 麻豆精品网站| 欧美一区二区三区免费视| 欧美另类久久久品| 亚洲国产综合91精品麻豆| 亚洲一区欧美一区| 91久久综合亚洲鲁鲁五月天| 欧美在线欧美在线| 国产精品免费网站| 一区二区高清视频在线观看| 午夜精品福利一区二区蜜股av| 久久综合久久久| 亚洲四色影视在线观看| 欧美福利视频在线| 亚洲国产精品成人久久综合一区| 久久成人在线| 亚洲图色在线| 国产精品人人做人人爽| 亚洲视频一区在线| 亚洲老司机av| 欧美日韩精品一区二区在线播放 | 91久久精品一区二区三区| 久久久久99| 韩国精品在线观看| 久久―日本道色综合久久| 午夜在线电影亚洲一区| 国产精品网红福利| 久久国产精品免费一区| 午夜精品视频在线观看| 国产欧美日本一区视频| 亚洲永久免费av| 亚洲午夜在线观看| 国产欧美二区| 裸体女人亚洲精品一区| 毛片av中文字幕一区二区| 亚洲国产综合91精品麻豆| 亚洲精品久久久久久久久| 欧美成人影音| 亚洲影视在线| 欧美高清在线视频| 欧美日本一区| 亚洲欧美日韩国产一区| 欧美一级专区免费大片| 欲香欲色天天天综合和网| 亚洲电影免费观看高清完整版在线观看| 欧美不卡一卡二卡免费版| 在线综合视频| 久久国产精品高清| 日韩视频精品| 欧美一区二区三区男人的天堂| 亚洲国产精品视频一区| 日韩亚洲成人av在线| 激情久久久久久| 日韩手机在线导航| 亚洲欧美一区二区原创| 亚洲人成网站777色婷婷| 一卡二卡3卡四卡高清精品视频| 国产一区在线视频| 日韩一级大片在线| 黄色精品一区二区| 欧美午夜精品一区| 亚洲制服丝袜在线| 久久亚洲精品一区二区| 亚洲视屏一区| 老司机免费视频一区二区三区| 一区二区三区成人| 久久久久综合一区二区三区| 亚洲午夜久久久久久久久电影院| 欧美一区二区视频在线观看2020| 欧美一区二区成人| 一区二区三区亚洲| 欧美性做爰毛片| 欧美日韩亚洲一区二| 蜜乳av另类精品一区二区| 欧美一区二区三区在线观看视频| 欧美日韩系列| 亚洲第一网站| 久久精品视频va| 久久精品国产亚洲一区二区| 在线综合亚洲| 亚洲尤物在线| 久久精品1区| 欧美大色视频| 欧美午夜久久| 99热这里只有成人精品国产| 国产精品影片在线观看| 欧美日韩精品一区二区三区| 国内成人精品2018免费看| 亚洲综合欧美| 免费看的黄色欧美网站| 中日韩美女免费视频网址在线观看| 欧美在线一区二区三区| 一本色道久久综合亚洲精品高清 | 91久久久久| 国产欧美日韩另类一区| 亚洲乱码精品一二三四区日韩在线 | 久久精品国语| 午夜在线播放视频欧美| 欧美jizz19性欧美| 国产欧美一区二区视频| 久久婷婷国产综合国色天香| 先锋影音国产精品| 亚洲欧洲精品一区| 久久婷婷av| 国产精品久久久久秋霞鲁丝| 国产综合欧美| 久久综合久久综合这里只有精品| 午夜影院日韩| 国产精品三级视频| 亚洲日本中文字幕| 国产一区二区三区自拍| 亚洲一区日韩在线| 日韩亚洲精品电影| 欧美日韩一区二区三区视频| 亚洲国产一区二区三区青草影视| 久久精品一区蜜桃臀影院| 一区二区三区产品免费精品久久75 | 国产噜噜噜噜噜久久久久久久久 | 欧美伊久线香蕉线新在线| 欧美日韩国产限制| 在线观看成人av电影| 亚洲国产精品va在线看黑人动漫 | 亚洲激情在线观看视频免费| 久久er99精品| 一区二区三区毛片| 国产精品一区二区在线观看网站| 午夜影视日本亚洲欧洲精品| 欧美一区二区三区四区高清| 亚洲欧美日韩综合一区| 欧美一区二区三区免费视频 | 亚洲欧美成人综合| 这里只有精品视频在线| 国产酒店精品激情| 亚洲日韩成人| 伊人婷婷久久| 一区二区三区免费网站| 开心色5月久久精品| 亚洲高清视频的网址| 国产精品久久久久久久电影 | 91久久精品日日躁夜夜躁国产| 欧美精品乱人伦久久久久久| 先锋影音一区二区三区| 欧美成人午夜免费视在线看片| 久久精品视频导航| 久久综合一区二区三区| 欧美成人午夜影院| 亚洲综合好骚| a91a精品视频在线观看| 亚洲激情社区| 欧美日韩一区二区视频在线| 亚洲第一伊人|