Download presentation
Presentation is loading. Please wait.
Published byRodger Cross Modified over 9 years ago
1
Biconnected Components CS 312
2
Objectives Formulate problems as problems on graphs Implement iterative DFS Describe what a biconnected component is Be ready to start project 2
3
Problems on Graphs What to store in each node of the graph? What does it mean for two nodes to be connected in the graph? What property do I want to analyze about the graph? – Then select or adapt an algorithm.
4
Generic graph exploration Explore (G, v) Input: G = (V,E) and v in V Output: visited(u) is true u for all u reachable from v. visited(v) = true previsit(v) for each edge (v,u) E if not visited(u) then explore (u) postvisit (v)
5
Iterative DFS version ExploreIterDFS (G, v) Input: G = (V,E) and v in V Output: visited(u) is true u for all u reachable from v. stack.push(v) if (stack.notEmpty()) v = stack.top visited(v) = true previsit(v) for the next edge (v,u) E if not visited(u) then stack.push(u) if all edges from v have been traversed then stack.pop(v) postvisit (v)
6
Iterative DFS version ExploreIterDFS (G, v) Input: G = (V,E) and v in V Output: visited(u) is true u for all u reachable from v. stack.push(v) if (stack.notEmpty()) v = stack.top visited(v) = true previsit(v) for the next edge (v,u) E if not visited(u) then stack.push(u) if all edges from v have been traversed then stack.pop(v) postvisit (v)
7
Definitions Biconnected component – The largest set of edges such that… – There is a set of EDGES for which there is a simple cycle between every edge – Or it is a single edge Bridge – Bicconnected component of size 1 Separating vertex – Vertex which can be deleted to partition the graph.
8
Example a b c d e f g
9
a b c d e f g
10
DFS Tree
11
“Low” numbering “pre” ordering “low” numbering
12
Separating Vertices How does that translate into a test on low and pre?
13
The Idea for the Algorithm If you can find low and pre, you can identify separating vertices. – You can use DFS to find low and pre. – Pre is easy. If you can find separating vertices, then you can use a second DFS to find biconnected components. – Keep in mind that the biconnected components are edges not vertices.
14
Example a b c d e f g abgabg cdhcdh efef ab bg gc cd dg pop h
15
Example a b c d e f g a,1 b,2 g,3 c,4 d,5 h,6 e,7 f,8 h pre numbering.
16
Example a b c d e f g a,1,1 b,2,1 g,3,3 c,4,3 d,5,3 h,6,6 e,7,3 f,8,3 h low numbering. u is a sep. vertex iff there is a child v of u s.t. pre(u) “< or =“ low(v)
17
Example a b c d e f g a,1,1 b,2,1 g,3,3 c,4,3 d,5,5 h,6,6 e,7,3 f,8,8 h Computing low. Always initialize u.low = u.pre When follow edge (u,v) and v is visited (and v != the DFS parent of u), u.low = min (u.low, v.pre) When pop u off DFS stack, pass low to parent. If u’s low is lower than it’s parent, then update parent. h,6,6 d,5,5 c,4,4 g,3,3 b,2,2 a,1,1 (vertex, pre, lowest low so far)
18
Example a b c d e f g a,1,1 b,2,1 g,3,3 c,4,3 d,5,5 h,6,6 e,7,3 f,8,8 h Computing low. Always initialize u.low = u.pre When follow edge (u,v) and v is visited, u.low = min (u.low, v.pre) When pop u off DFS stack, pass low to parent. If u’s low is lower than it’s parent, then update parent. d,5,5 h,6,6 d,5,5 c,4,4 g,3,3 b,2,2 a,1,1 (vertex, pre, lowest low so far) d is visited but, d is h’s dfs parent Do nothing.
19
Example a b c d e f g a,1,1 b,2,1 g,3,3 c,4,3 d,5,5 h,6,6 e,7,3 f,8,8 h Computing components 2 nd DFS use a stack of edges. push a mark onto the edge stack with the child of a SV when pop the child of an SV (in the node stack) pop back to the mark. d,5,5 h,6,6 d,5,5 c,4,4 g,3,3 b,2,2 a,1,1 (vertex, pre, lowest low so far) d is visited but, d is h’s dfs parent Do nothing.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.