0% found this document useful (0 votes)
30 views35 pages

DFSalgo

The document discusses depth-first search (DFS) algorithms for exploring graphs. It defines DFS, provides pseudocode for implementing DFS, and uses an example graph to illustrate how DFS works. It also defines the different types of edges that can be identified during DFS: tree edges, back edges, forward edges, and cross edges. A key theorem discussed is that for undirected graphs, DFS will only produce tree edges and back edges.

Uploaded by

satishreddy7899
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views35 pages

DFSalgo

The document discusses depth-first search (DFS) algorithms for exploring graphs. It defines DFS, provides pseudocode for implementing DFS, and uses an example graph to illustrate how DFS works. It also defines the different types of edges that can be identified during DFS: tree edges, back edges, forward edges, and cross edges. A key theorem discussed is that for undirected graphs, DFS will only produce tree edges and back edges.

Uploaded by

satishreddy7899
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 35

CS 332: Algorithms

Graph Algorithms

David Luebke 1
12/07/21
Review: Depth-First Search
● Depth-first search is another 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

David Luebke 2
12/07/21
Review: DFS Code
DFS(G) DFS_Visit(u)
{ {
for each vertex u  G->V u->color = YELLOW;
{ time = time+1;
u->d = time;
u->color = WHITE;
for each v  u->Adj[]
}
{
time = 0;
if (v->color == WHITE)
for each vertex u  G->V
DFS_Visit(v);
{ }
if (u->color == WHITE) u->color = BLACK;
DFS_Visit(u); time = time+1;
} u->f = time;
} }

David Luebke 3
12/07/21
DFS Example
source
vertex

David Luebke 4
12/07/21
DFS Example
source
vertex
d f
1 | | |

| |

| | |

David Luebke 5
12/07/21
DFS Example
source
vertex
d f
1 | | |

2 | |

| | |

David Luebke 6
12/07/21
DFS Example
source
vertex
d f
1 | | |

2 | |

3 | | |

David Luebke 7
12/07/21
DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 | |

David Luebke 8
12/07/21
DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 5 | |

David Luebke 9
12/07/21
DFS Example
source
vertex
d f
1 | | |

2 | |

3 | 4 5 | 6 |

David Luebke 10
12/07/21
DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 |

3 | 4 5 | 6 |

David Luebke 11
12/07/21
DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 |

3 | 4 5 | 6 |

David Luebke 12
12/07/21
DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 9 |

3 | 4 5 | 6 |

What is the structure of the yellow vertices?


What do they represent?
David Luebke 13
12/07/21
DFS Example
source
vertex
d f
1 | 8 | |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 14
12/07/21
DFS Example
source
vertex
d f
1 | 8 |11 |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 15
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 |

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 16
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 |

David Luebke 17
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 14|

David Luebke 18
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|

2 | 7 9 |10

3 | 4 5 | 6 14|15

David Luebke 19
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

David Luebke 20
12/07/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?

David Luebke 21
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges
David Luebke 22
12/07/21
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 yellow vertex (yellow to yellow)

David Luebke 23
12/07/21
DFS Example
source
vertex
d f
1 |12 8 |11 13|16

2 | 7 9 |10

3 | 4 5 | 6 14|15

Tree edges Back edges


David Luebke 24
12/07/21
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 yellow node to black node

David Luebke 25
12/07/21
DFS Example
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


David Luebke 26
12/07/21
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 yellow node to a black node

David Luebke 27
12/07/21
DFS Example
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


David Luebke 28
12/07/21
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

David Luebke 29
12/07/21
DFS: Kinds Of Edges
● Thm 23.9: If G is undirected, a DFS produces
only tree and back edges
● Proof by contradiction:
source
■ Assume there’s a forward edge F?
○ But F? edge must actually be a
back edge (why?)

David Luebke 30
12/07/21
DFS: Kinds Of Edges
● Thm 23.9: If G is undirected, a DFS produces only
tree and back edges
● Proof by contradiction:
■ Assume there’s a cross edge source
○ But C? edge cannot be cross:
○ must be explored from one of the
vertices it connects, becoming a tree
vertex, before other vertex is explored
○ So in fact the picture is wrong…both
lower tree edges cannot in fact be
tree edges
C?

David Luebke 31
12/07/21
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

David Luebke 32
12/07/21
DFS And Cycles
● How would you modify the code to detect cycles?
DFS(G) DFS_Visit(u)
{ {
for each vertex u  G->V u->color = GREY;
{ time = time+1;
u->color = WHITE; u->d = time;
} for each v  u->Adj[]
time = 0; {
for each vertex u  G->V if (v->color == WHITE)
{ DFS_Visit(v);
if (u->color == WHITE) }
DFS_Visit(u); u->color = BLACK;
} time = time+1;
} u->f = time;
David Luebke 33}
12/07/21
DFS And Cycles
● What will be the running time?
DFS(G) DFS_Visit(u)
{ {
for each vertex u  G->V u->color = GREY;
{ time = time+1;
u->color = WHITE; u->d = time;
} for each v  u->Adj[]
time = 0; {
for each vertex u  G->V if (v->color == WHITE)
{ DFS_Visit(v);
if (u->color == WHITE) }
DFS_Visit(u); u->color = BLACK;
} time = time+1;
} u->f = time;
David Luebke 34}
12/07/21
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

David Luebke 35
12/07/21

You might also like