CMSC 341 Graphs DFS Expanded Depth First Traversal

  • Slides: 5
Download presentation
CMSC 341 Graphs – DFS Expanded

CMSC 341 Graphs – DFS Expanded

Depth First Traversal with Finish Times dfs(Graph G) { for (each v V) d[v]

Depth First Traversal with Finish Times dfs(Graph G) { for (each v V) d[v] = 0 time = 0 for (each v V) if (d[v] = 0) dfs (v) } dfs(Vertex v) { time = time + 1 d[v] = time for(each vertex w adjacent if (d[w] = 0) dfs(w) time = time + 1 f[v] = time } // d = discovery “time” // “global” variable // not discovered yet // “discover” and mark v from v) // w not discovered // v is “finished” 2

Edge Types After DFS, edges can be classified into the following types: – tree

Edge Types After DFS, edges can be classified into the following types: – tree edges -- a discovered vertex v 1 encounters an undiscovered vertex v 2; the edge between them is a tree edge – back edges -- a discovered vertex v 1 encounters a discovered but unfinished vertex v 2; the edge between them is a back edge. (Graph has a cycle if and only if there is a back edge. ) – forward edges (directed graphs only) -- a discovered vertex v 1 encounters a finished vertex v 2 – cross edges (directed graphs only) -- a discovered vertex v 1 encounters a finished vertex v 2 and d[v 1] > d[v 2] 3

Edge Types (after DFS completion) Condition Type of Edge (v 1, v 2) 4

Edge Types (after DFS completion) Condition Type of Edge (v 1, v 2) 4

Utility of Discovery/Finish Times • A graph contains a cycle if and only if

Utility of Discovery/Finish Times • A graph contains a cycle if and only if it contains a back edge. • Finish times can be used to do a topological sort of a digraph (later). • Finish times can be used to find strongly connected components in a graph. 5