u ndirected g raphs
play

U NDIRECTED G RAPHS Acknowledgement: The course slides are adapted - PowerPoint PPT Presentation

BBM 202 - ALGORITHMS D EPT . OF C OMPUTER E NGINEERING U NDIRECTED G RAPHS Acknowledgement: The course slides are adapted from the slides prepared by R. Sedgewick and K. Wayne of Princeton University. TODAY Undirected Graphs


  1. 
 
 Depth-first search Goal. Find all vertices connected to s (and a path). Idea. Mimic maze exploration. Algorithm. • Use recursion (ball of string). • Mark each visited vertex (and keep track of edge taken to visit it). • Return (retrace steps) when no unvisited options. Data structures. • boolean[] marked to mark visited vertices. • int[] edgeTo to keep tree of paths. 
 (edgeTo[w] == v) means that edge v-w taken to visit w for first time

  2. Depth-first search public class DepthFirstPaths { marked[v] = true private boolean[] marked; if v connected to s private int[] edgeTo; edgeTo[v] = previous private int s; vertex on path from s to v public DepthFirstSearch(Graph G, int s) { initialize data structures ... dfs(G, s); find vertices connected to s } recursive DFS does the private void dfs(Graph G, int v) work { marked[v] = true; for (int w : G.adj(v)) if (!marked[w]) { dfs(G, w); edgeTo[w] = v; } } } 27

  3. Depth-first search properties Proposition. DFS marks all vertices connected to s in time proportional to 
 the sum of their degrees. 
 Pf. set of marked source vertices • Correctness: s - if w marked, then w connected to s (why?) - if w connected to s , then w marked 
 (if w unmarked, then consider last edge 
 v on a path from s to w that goes from a 
 no such edge set of can exist marked vertex to an unmarked one) unmarked vertices x • Running time: 
 Each vertex connected to s is visited once. w 28

  4. 
 Depth-first search properties Proposition. After DFS, can find vertices connected to s in constant time and can find a path to s (if one exists) in time proportional to its length. Pf. edgeTo[] is a parent-link representation of a tree rooted at s . public boolean hasPathTo(int v) { return marked[v]; } edgeTo[] public Iterable<Integer> pathTo(int v) 0 { 1 2 if (!hasPathTo(v)) return null; 2 0 Stack<Integer> path = new Stack<Integer>(); 3 2 for (int x = v; x != s; x = edgeTo[x]) 4 3 path.push(x); 5 3 path.push(s); return path; } 29

  5. U NDIRECTED G RAPHS ‣ Graph API ‣ Depth-first search ‣ Breadth-first search ‣ Connected components ‣ Challenges

  6. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. tinyCG.txt 0 0 2 2 V 6 E 8 0 5 2 4 1 1 2 3 1 2 0 1 3 3 3 4 3 5 5 5 4 4 0 2 graph G 31

  7. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 queue v edgeTo[v] 0 – 1 – 1 1 2 – 3 – 4 – 3 3 5 – 5 5 4 4 add 0 to queue 32

  8. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 queue v edgeTo[v] 0 – 1 – 1 1 2 – 3 – 4 – 3 3 5 – 5 5 4 4 0 dequeue 0 33

  9. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 2 queue v edgeTo[v] 0 – 1 – 1 1 0 2 – 3 – 4 – 3 3 5 – 5 5 4 4 dequeue 0 34

  10. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 2 queue v edgeTo[v] 0 – 0 1 – 1 1 1 2 0 3 – 4 – 3 3 5 – 5 5 4 4 2 dequeue 0 35

  11. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 3 – 4 – 3 3 1 0 5 – 5 5 5 4 4 2 dequeue 0 36

  12. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 0 2 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 5 3 – 4 – 3 3 1 5 0 5 5 5 4 4 2 0 done 37

  13. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 5 3 – 4 – 3 3 1 5 0 5 5 5 4 4 2 dequeue 2 38

  14. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 3 – 4 – 3 3 5 5 0 5 5 5 4 4 1 dequeue 2 39

  15. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 3 – 4 – 3 3 5 5 0 5 5 5 4 4 1 dequeue 2 40

  16. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 3 2 – 4 – 3 3 3 5 5 0 5 5 5 4 4 1 dequeue 2 41

  17. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 1 1 1 2 0 3 2 3 4 2 – 3 3 3 5 5 0 5 5 5 4 4 4 1 dequeue 2 42

  18. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 2 queue v edgeTo[v] 0 – 1 0 4 1 1 1 2 0 3 2 3 4 2 3 3 3 5 5 0 5 5 5 4 4 4 1 2 done 43

  19. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 4 1 1 2 0 3 2 3 4 2 3 3 3 5 5 0 5 5 5 4 4 4 1 dequeue 1 44

  20. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 1 2 0 3 2 4 4 2 3 3 3 3 5 0 5 5 5 4 4 4 5 dequeue 1 45

  21. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 1 2 0 3 2 4 4 2 3 3 3 3 5 0 5 5 5 4 4 4 5 dequeue 1 46

  22. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 1 2 0 3 2 4 4 2 3 3 3 3 5 0 5 5 5 4 4 4 5 1 done 47

  23. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 4 2 3 3 3 3 5 0 5 5 4 4 4 5 dequeue 5 48

  24. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 3 4 5 0 5 5 4 4 4 3 dequeue 5 49

  25. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 3 4 5 0 5 5 4 4 4 3 dequeue 5 50

  26. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 3 4 5 0 5 5 4 4 4 3 5 done 51

  27. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 4 5 0 5 4 4 4 3 dequeue 3 52

  28. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 5 0 5 4 4 4 4 dequeue 3 53

  29. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 5 0 5 4 4 4 4 dequeue 3 54

  30. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 3 5 0 5 4 4 4 4 dequeue 3 55

  31. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 4 4 4 3 done 56

  32. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 4 4 dequeue 4 57

  33. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 4 dequeue 4 58

  34. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 4 dequeue 4 59

  35. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 queue v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 4 4 done 60

  36. Breadth-first search Repeat until queue is empty: • Remove vertex v from queue. • Add to queue all unmarked vertices adjacent to v and mark them. 0 2 v edgeTo[v] 0 – 1 0 1 2 0 3 2 4 2 3 5 0 5 4 done 61

  37. Breadth-first search Depth-first search. Put unvisited vertices on a stack. Breadth-first search. Put unvisited vertices on a queue. Shortest path. Find path from s to t that uses fewest number of edges. BFS (from source vertex s) Put s onto a FIFO queue, and mark s as visited. Repeat until the queue is empty: - remove the least recently added vertex v - add each of v's unvisited neighbors to the queue, 
 and mark them as visited. Intuition. BFS examines vertices in increasing distance from s . 62

  38. 
 
 Breadth-first search properties Proposition. BFS computes shortest path (number of edges) from s 
 in a connected graph in time proportional to E + V . Pf. [correctness] Queue always consists of zero or more vertices of distance k from s , followed by zero or more vertices of distance k + 1 . Pf. [running time] Each vertex connected to s is visited once. 1 4 0 2 1 0 2 3 3 5 4 5 standard drawing dist = 0 dist = 1 dist = 2 63

  39. Breadth-first search public class BreadthFirstPaths { private boolean[] marked; private boolean[] edgeTo[]; private final int s; … private void bfs(Graph G, int s) { Queue<Integer> q = new Queue<Integer>(); q.enqueue(s); marked[s] = true; while (!q.isEmpty()) { int v = q.dequeue(); for (int w : G.adj(v)) { if (!marked[w]) { q.enqueue(w); marked[w] = true; edgeTo[w] = v; } } } } } 64

  40. U NDIRECTED G RAPHS ‣ Graph API ‣ Depth-first search ‣ Breadth-first search ‣ Connected components ‣ Challenges

  41. 
 
 
 
 
 
 
 
 
 
 
 Connectivity queries Def. Vertices v and w are connected if there is a path between them. Goal. Preprocess graph to answer queries: is v connected to w ? 
 in constant time. public class CC CC(Graph G) find connected components in G boolean connected(int v, int w) are v and w connected? int count() number of connected components component identifier for v 
 int id(int v) Depth-first search. [next few slides] 66

  42. 
 
 
 
 
 
 
 
 
 Connected components The relation "is connected to" is an equivalence relation: • Reflexive: v is connected to v . • Symmetric: if v is connected to w , then w is connected to v . • Transitive: if v connected to w and w connected to x , then v connected to x . Def. A connected component is a maximal set of connected vertices. v id[v] 0 0 
 1 0 7 8 0 2 0 
 3 0 4 0 
 1 2 6 5 0 9 10 6 0 
 7 1 3 4 8 1 11 12 9 2 5 10 2 11 2 3 connected components 12 2 Remark. Given connected components, can answer queries in constant time. 67

  43. Connected components Def. A connected component is a maximal set of connected vertices. 63 connected components 68

  44. Connected components Goal. Partition vertices into connected components. Connected components Initialize all vertices v as unmarked. For each unmarked vertex v, run DFS to identify all tinyG.txt vertices discovered as part of the same component. V 13 E 13 0 5 4 3 0 1 9 12 6 4 5 4 0 2 11 12 9 10 0 6 7 8 9 11 5 3 69

  45. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 0 7 7 8 8 7 8 0 F – 1 F – 2 F – 1 1 1 2 2 2 6 6 6 9 9 9 10 10 10 3 F – 4 F – 5 F – 3 3 3 4 4 4 11 11 11 12 12 12 6 F – 7 F – 8 F – 5 5 5 9 F – 10 F – 11 F – graph G 12 F – 70

  46. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 F – 4 F – 5 F – 3 3 4 4 11 11 12 12 6 F – 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 0: check 6, check 2, check 1 and check 5 12 F – 71

  47. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 F – 4 F – 5 F – 3 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 6: check 0 and check 4 12 F – 72

  48. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 6 9 9 10 10 3 F – 4 F – 5 F – 3 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 6: check 0 and check 4 12 F – 73

  49. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 F – 4 T 0 5 F – 3 3 4 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 4: check 5, check 6 and check 3 12 F – 74

  50. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 F – 4 T 0 5 T 0 3 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 5 9 F – 10 F – 11 F – visit 5: check 3, check 4 and check 0 12 F – 75

  51. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 3: check 5 and check 4 12 F – 76

  52. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 3: check 5 and check 4 12 F – 77

  53. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – 3 done 12 F – 78

  54. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 5: check 3, check 4 and check 0 12 F – 79

  55. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – visit 5: check 3, check 4 and check 0 12 F – 80

  56. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 5 9 F – 10 F – 11 F – 5 done 12 F – 81

  57. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 4: check 5, check 6 and check 3 12 F – 82

  58. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 4: check 5, check 6 and check 3 12 F – 83

  59. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – 4 done 12 F – 84

  60. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – 6 done 12 F – 85

  61. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 7 8 7 8 0 T 0 1 F – 2 F – 1 1 2 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 0: check 6, check 2, check 1 and check 5 12 F – 86

  62. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 F – 2 T 0 1 1 2 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 2: check 0 12 F – 87

  63. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 7 8 7 8 0 T 0 1 F – 2 T 0 1 1 2 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – 2 done 12 F – 88

  64. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 7 8 7 8 0 T 0 1 F – 2 T 0 1 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 0: check 6, check 2, check 1 and check 5 12 F – 89

  65. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – visit 1: check 0 12 F – 90

  66. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – 1 done 12 F – 91

  67. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – 0 done 12 F – 92

  68. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 connected 1 T 0 component 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – connected component: 0 1 2 3 4 5 6 12 F – 93

  69. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 F – 8 F – 5 9 F – 10 F – 11 F – check 1 2 3 4 5 6 12 F – 94

  70. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 F – 5 9 F – 10 F – 11 F – visit 7: check 8 12 F – 95

  71. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 T 1 5 9 F – 10 F – 11 F – visit 8: check 7 12 F – 96

  72. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 T 1 5 9 F – 10 F – 11 F – 8 done 12 F – 97

  73. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 T 1 5 9 F – 10 F – 11 F – 7 done 12 F – 98

  74. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 T 1 5 9 F – 10 F – 11 F – connected component: 7 8 12 F – 99

  75. Connected components To visit a vertex v : • Mark vertex v as visited. • Recursively visit all unmarked vertices adjacent to v . v marked[] cc[] 0 7 8 0 T 0 1 T 0 2 T 0 1 2 6 9 9 10 10 3 T 0 4 T 0 5 T 0 3 4 11 11 12 12 6 T 0 7 T 1 8 T 1 5 9 F – 10 F – 11 F – check 8 12 F – 100

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend