割点和桥
/* *定義 * 割點:如果在圖G中刪去一個結點u后,圖G的連通分枝數增加,即W(G-u)>W(G),則稱結點u為G的割點,又稱關節點; * 橋:如果在圖G中刪去一條邊e后,圖G的連通分支數增加,即W(G-e)>W(G),則稱邊u為G的橋,又稱割邊或關節邊; * 雙連通分支:G中不含割點的極大連通子圖稱為G的雙連通分支,又稱為G的塊; * * *DFS * 描述: * 在對于任選一個圖中結點為根的DFS搜索樹中建立一個LAB數組與LOW數組; * LAB數組存儲個結點的編號,LOW數組存儲各點及其子樹的各結點能到達的最小編號結點的編號; * * DFS(u) //lab為一個全局變量,初始為1,LAB數組各項初始為0; * LAB[u] = LOW[u] = lab++ //1 * for each (u, v) in E(G) //2 * if LAB[v] is 0 //3 * DFS(v) //4 * LOW[u] = min{LOW[u], LOW[v]} //5 * else if v isnot parent of u //6 * LOW[u] = min{LOW[u], LAB[v]} //7 * 第3行中,如果(u,v)是樹邊,則對v做深度優先搜索,并且LOW[u]=min{LOW[u],LOW[v]}; * 如果(u,v)是反向邊,則LOW[u]=min{LOW[u],LAB[v]}; * * *割點 * 描述: * 當一個結點u是割點時必滿足以下兩個條件之一: * 1)u為根且至少有兩棵子樹; * 2)u不為根且存在一個u在深搜樹中的子女v使得LOW[v]≥LAB[u]; * * *橋 * 描述: * 一條邊e=(u,v)是橋,當且僅當e為樹枝邊且LOW[v]>LAB[u]; *
**/
總結
- 上一篇: 网络最大流的三种基础算法
- 下一篇: 图的割点、桥与双连通分支