Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 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