Download presentation
Presentation is loading. Please wait.
Published byAlberta Preston Modified over 8 years ago
1
CMSC 341 Graphs – DFS Expanded
2
2 Depth First Traversal with Finish Times dfs(Graph G) { for (each v V) d[v] = 0// d = discovery “time” time = 0// “global” variable for (each v V) if (d[v] = 0)// not discovered yet dfs (v) } dfs(Vertex v) { time = time + 1 d[v] = time// “discover” and mark v for(each vertex w adjacent from v) if (d[w] = 0)// w not discovered dfs(w) time = time + 1 f[v] = time// v is “finished” }
3
3 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 ]
4
4 Edge Types (after DFS completion) ConditionType of Edge (v 1, v 2 )
5
5 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.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.