Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 11 - Friday.  What did we talk about last time?  Exam 2 post mortem  Cycle detection in undirected graphs  Topological sort and cycle detection.

Similar presentations


Presentation on theme: "Week 11 - Friday.  What did we talk about last time?  Exam 2 post mortem  Cycle detection in undirected graphs  Topological sort and cycle detection."— Presentation transcript:

1 Week 11 - Friday

2  What did we talk about last time?  Exam 2 post mortem  Cycle detection in undirected graphs  Topological sort and cycle detection in directed graphs

3

4 Spellchecker

5

6  Connected for an undirected graph: There is a path from every node to every other node  How can we determine if a graph is connected?

7  Startup 1. Set the number of all nodes to 0 2. Pick an arbitrary node u and run DFS( u, 1 )  DFS( node v, int i ) 1. Set number(v) = i++ 2. For each node u adjacent to v If number(u) is 0 DFS( u, i )  If any node has a number of 0, the graph is not connected

8

9  Connected components are the parts of the graph that are connected to each other  In a connected graph, the whole graph forms a connected component  In a graph that is not entirely connected, how do we find connected components?  DFS again!  We run DFS on every unmarked node and mark all nodes with a number count  Each time DFS completes, we increment count and start DFS on the next unmarked node  All nodes with the same value are in a connected component

10  Weakly connected directed graph: If the graph is connected when you make all the edges undirected  Strongly connected directed graph: If for every pair of nodes, there is a path between them in both directions

11  Components of a directed graph can be strongly connected  A strongly connected component is a subgraph such that all its nodes are strongly connected  To find strongly connected components, we can use a special DFS  It includes the notion of a predecessor node, which is the lowest numbered node in the DFS that can reach a particular node

12  StrongDFS( node v, int i ) 1. Set number(v) = i++ 2. Set predecessor(v) to number(v) 3. Push(v) 4. For each node u adjacent to v If number(u) is 0 StrongDFS( u, i ) predecessor(v) = min(predecessor(v), predecessor(u)) Else if number(u) < number(v) and u is 0n the stack predecessor(v) = min(predecessor(v), number(u)) 5. If predecessor(v) is number(v) w = pop() while w is not v output w w = pop() output w

13  StronglyConnected( Vertices V )  Set i = 1  For each node v in V Set number(v) = 0  For each node v in V If number(v) is 0 StrongDFS( v, i ) Remember that i is passed by reference

14 A B I D F H C E G

15

16

17  Minimum spanning trees  Shortest paths  Matching  Euler tours

18  Finish Project 3  Due tonight before midnight  Keep reading sections 4.3 and 4.4


Download ppt "Week 11 - Friday.  What did we talk about last time?  Exam 2 post mortem  Cycle detection in undirected graphs  Topological sort and cycle detection."

Similar presentations


Ads by Google