Presentation is loading. Please wait.

Presentation is loading. Please wait.

Depth-First Search Depth-first search is a strategy for exploring a graph Explore “deeper” in the graph whenever possible Edges are explored out of the.

Similar presentations


Presentation on theme: "Depth-First Search Depth-first search is a strategy for exploring a graph Explore “deeper” in the graph whenever possible Edges are explored out of the."— Presentation transcript:

1 Depth-First Search Depth-first search is a strategy for exploring a graph Explore “deeper” in the graph whenever possible Edges are explored out of the most recently discovered vertex v that still has unexplored edges When all of v’s edges have been explored, backtrack to the vertex from which v was discovered zhengjin /8/24

2 Depth-First Search Vertices initially colored white
Then colored gray when discovered Then black when finished zhengjin /8/24

3 Depth-First Search: The Code
DFS(G) { for each vertex u  G->V u->color = WHITE; } time = 0; if (u->color == WHITE) DFS_Visit(u); DFS_Visit(u) { u->color = GREY; time = time+1; u->d = time; for each v  u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; u->f = time; zhengjin /8/24

4 DFS Example source vertex zhengjin /8/24

5 DFS Example source vertex d f 1 | | | | | | | | zhengjin /8/24

6 DFS Example source vertex d f 1 | | | 2 | | | | | zhengjin /8/24

7 DFS Example d f 1 | | | 2 | | 3 | | | source vertex
zhengjin /8/24

8 DFS Example d f 1 | | | 2 | | 3 | 4 | | source vertex
zhengjin /8/24

9 DFS Example d f 1 | | | 2 | | 3 | 4 5 | | source vertex
zhengjin /8/24

10 DFS Example d f 1 | | | 2 | | 3 | 4 5 | 6 | source vertex
zhengjin /8/24

11 DFS Example d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | source vertex
zhengjin /8/24

12 DFS Example d f 1 | 8 | | 2 | 7 | 3 | 4 5 | 6 | source vertex
zhengjin /8/24

13 What is the structure of the grey vertices? What do they represent?
DFS Example source vertex d f 1 | 8 | | 2 | 7 9 | 3 | 4 5 | 6 | What is the structure of the grey vertices? What do they represent? zhengjin /8/24

14 DFS Example d f 1 | 8 | | 2 | 7 9 |10 3 | 4 5 | 6 | source vertex
zhengjin /8/24

15 DFS Example d f 1 | 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | source vertex
zhengjin /8/24

16 DFS Example d f 1 |12 8 |11 | 2 | 7 9 |10 3 | 4 5 | 6 | source vertex
zhengjin /8/24

17 DFS Example d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 |
source vertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 | zhengjin /8/24

18 DFS Example d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|
source vertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14| zhengjin /8/24

19 DFS Example d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13| 2 | 7 9 |10 3 | 4 5 | 6 14|15 zhengjin /8/24

20 DFS Example d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 zhengjin /8/24

21 DFS: Kinds of edges DFS introduces an important distinction among edges in the original graph: Tree edge: encounter new (white) vertex The tree edges form a spanning forest Can tree edges form cycles? Why or why not? zhengjin /8/24

22 DFS Example d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges zhengjin /8/24

23 DFS: Kinds of edges DFS introduces an important distinction among edges in the original graph: Tree edge: encounter new (white) vertex Back edge: from descendent to ancestor Encounter a grey vertex (grey to grey) zhengjin /8/24

24 DFS Example d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges zhengjin /8/24

25 DFS: Kinds of edges DFS introduces an important distinction among edges in the original graph: Tree edge: encounter new (white) vertex Back edge: from descendent to ancestor Forward edge: from ancestor to descendent Not a tree edge, though From grey node to black node zhengjin /8/24

26 DFS Example d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges Forward edges zhengjin /8/24

27 DFS: Kinds of edges DFS introduces an important distinction among edges in the original graph: Tree edge: encounter new (white) vertex Back edge: from descendent to ancestor Forward edge: from ancestor to descendent Cross edge: between a tree or subtrees From a grey node to a black node zhengjin /8/24

28 DFS Example d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15
source vertex d f 1 |12 8 |11 13|16 2 | 7 9 |10 3 | 4 5 | 6 14|15 Tree edges Back edges Forward edges Cross edges zhengjin /8/24

29 DFS: Kinds of edges DFS introduces an important distinction among edges in the original graph: Tree edge: encounter new (white) vertex Back edge: from descendent to ancestor Forward edge: from ancestor to descendent Cross edge: between a tree or subtrees Note: tree & back edges are important; most algorithms don’t distinguish forward & cross zhengjin /8/24

30 DFS And Graph Cycles Thm: An undirected graph is acyclic iff a DFS yields no back edges If acyclic, no back edges (because a back edge implies a cycle If no back edges, acyclic No back edges implies only tree edges (Why?) Only tree edges implies we have a tree or a forest Which by definition is acyclic Thus, can run DFS to find whether a graph has a cycle zhengjin /8/24

31 DFS And Cycles How would you modify the code to detect cycles? DFS(G)
{ for each vertex u  G->V u->color = WHITE; } time = 0; if (u->color == WHITE) DFS_Visit(u); DFS_Visit(u) { u->color = GREY; time = time+1; u->d = time; for each v  u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; u->f = time; zhengjin /8/24

32 DFS And Cycles What will be the running time? DFS(G) {
for each vertex u  G->V u->color = WHITE; } time = 0; if (u->color == WHITE) DFS_Visit(u); DFS_Visit(u) { u->color = GREY; time = time+1; u->d = time; for each v  u->Adj[] if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; u->f = time; zhengjin /8/24

33 DFS And Cycles What will be the running time? A: O(V+E)
We can actually determine if cycles exist in O(V) time: In an undirected acyclic forest, |E|  |V| - 1 So count the edges: if ever see |V| distinct edges, must have seen a back edge along the way zhengjin /8/24


Download ppt "Depth-First Search Depth-first search is a strategy for exploring a graph Explore “deeper” in the graph whenever possible Edges are explored out of the."

Similar presentations


Ads by Google