4 Solutions Clrs 22
4 Solutions Clrs 22
4 Solutions Clrs 22
CMPSC 465
Disclaimer: This is a draft of solutions that has been prepared by the TAs and the instructor makes no guarantees that
solutions presented here contain the level of detail that would be expected on an exam. Any errors or explanations you find
unclear should be reported to either of the TAs for corrections first.
Exercise 22.1-1
Given an adjacency-list representation of a directed graph, how long does it take to compute the out-degree of every vertex?
How long does it take to compute the in-degrees?
Solution:
Given an adjacency-list representation Adj of a directed graph, the out-degree of a vertex u is equal to the length of Adj[u],
and the sum of the lengths of all the adjacency lists in Adj is |E|. Thus the time to compute the out-degree of every vertex is
(|V| + |E|).
The in-degree of a vertex u is equal to the number of times it appears in all the lists in Adj. If we search all the lists for each
vertex, the time to compute the in-degree of every vertex is (|V||E|).
(Alternatively, we can allocate an array T of size |V| and initialize its entries to zero. Then we only need to scan the lists in
Adj once, incrementing T [u] when we see u in the lists. The values in T will be the in-degrees of every vertex. This can be
done in (|V| + |E|) time with (|V|) additional storage.)
Page 1 of 8
Exercise 22.1-2
Give an adjacency-list representation for a complete binary tree on 7 vertices. Give an equivalent adjacency-matrix
representation. Assume that vertices are numbered from 1 to 7 as in a binary heap.
Solution:
A complete binary tree looks like:
1
1
0
1
1
0
0
0
0
Page 2 of 8
2
1
0
0
1
1
0
0
3
1
0
0
0
0
1
1
4
0
1
0
0
0
0
0
5
0
1
0
0
0
0
0
6
0
0
1
0
0
0
0
7
0
0
1
0
0
0
0
Exercise 22.2-1
Show the dist and pred values that result from running breadth-first search on the directed graph below, using vertex 3 as the
source.
1
2
3
Solution:
3.pred
:NIL
0
(a)
1
Q
1
1
5.pred 6.pred
:3
:3
4
2
2.pred 3.pred
:4 :NIL
3
0
2
3
2
1
1
4.pred 5.pred 6.pred
:5
:3
:3
(e)
(b)
1
3.pred
:NIL
0
2
1
1
4.pred 5.pred 6.pred
:5
:3
:3
(d)
3.pred
:NIL
0
3.pred
:NIL
0
1
Q
2
1
1
4.pred 5.pred 6.pred
:5
:3
:3
2.pred 3.pred
:4 :NIL
3
0
2
1
1
4.pred 5.pred 6.pred
:5
:3
:3
(f)
(c)
The procedure of the breadth-first search is shown above. From the result, we can see that:
Node
3
5
6
4
2
1
Page 3 of 8
Pred
NIL
3
3
5
4
NIL
dist
0
1
1
2
3
Exercise 22.2-2
Show the dist and pred values that result from running breadth-first search on the undirected graph below, using vertex u as
r
s
t
u
the source.
Solution:
(a)
u.pred
:NIL
0
(f)
(b)
t.pred u.pred
:NIL
:u
1
0
1
1
x.pred y.pred
:u
:u
t.pred u.pred
:NIL
:u
1
0
(c)
(g)
(d)
(e)
Page 4 of 8
r
4
2
1
1
w.pred x.pred y.pred
:u
:t
:u
v
5
5
2
1
1
v.pred w.pred x.pred y.pred
:u
:r
:t
:u
r.pred s.pred t.pred u.pred
:NIL
:s
:w
:u
3
1
4
0
Q
5
2
1
1
v.pred w.pred x.pred y.pred
:u
:r
:t
:u
t.pred u.pred
:NIL
:u
1
0
Q
(i)
2
1
1
w.pred x.pred y.pred
:u
:t
:u
t.pred u.pred
:NIL
:u
1
0
Q
(h)
2
1
1
w.pred x.pred y.pred
:u
:t
:u
2
1
1
w.pred x.pred y.pred
:u
:t
:u
u
0
2
1
1
w.pred x.pred y.pred
:u
:t
:u
w
2
The procedure of the breadth-first search is shown above. From the result, we can see that:
Node
u
t
x
y
w
s
r
v
Pred
NIL
u
u
u
t
w
s
r
dist
0
1
1
1
2
3
4
5
Exercise 22.3-1
Make a 3-by-3 chart with row and column labels WHITE, GRAY, and BLACK. In each cell (i, j), indicate whether, at any
point during a depth-first search of directed graph, there can be an edge from a vertex of color i to a vertex of color j. For
each possible edge, indicate what edge types it can be. Make a second such chart for depth-first search of an undirected graph.
Solution:
Directed graph:
WHITE
GRAY
BLACK
WHITE
tree, back, forward, and cross
tree and forward
GRAY
back and cross
tree, forward, back
back and cross
BLACK
cross
tree, forward, and cross
tree, forward, back and cross
WHITE
tree and back
tree and back
GRAY
tree and back
tree and back
tree and back
BLACK
Undirected graph:
WHITE
GRAY
BLACK
Exercise 22.3-2
Show how depth-first search works on the graph of Figure 22.6. Assume that the for loop of lines 57 of the DFS procedure
considers the vertices in alphabetical order, and assume that each adjacency list is ordered alphabetically. Show the discovery
and finishing times for each vertex, and show the classification of each edge.
Page 5 of 8
Solution:
The discovery and finishing times for each vertex are shown in the figure below:
17,20
1,16
8,15
2,7
3,6
4,5
9,12
18,19
13,14
10,11
Tree edges: (q, s), (s, v), (v, w), (q, t), (t, x), (x, z), (t, y), (r, u)
Back edges: (w, s), (z, x), (y, q)
Forward edges: (q, w)
Cross edges: (r, y), (u, y)
Exercise 22.3-3
Show the parenthesis structure of the depth-first search of Figure 22.4.
Exercise 22.3-7
Rewrite the procedure DFS, using a stack to eliminate recursion.
Solution:
Assume that the stack has following operations:
PUSH(S, v) pushes v into the stack;
POP(S) returns the top of the stack and removes it;
TOP(S) returns the top of the stack without removing it.
Page 6 of 8
Exercise 22.4-1
Show the ordering of vertices produced by TOPOLGICAL-SORT when it is run on the dag
of Figure 22.8, under the assumption of Exercise 22.3-2.
Solution:
According to the assumption of Exercise 22.3-2, the for loop of lines 57 of the DFS procedure
Page 7 of 8
considers the vertices in alphabetical order, and that each adjacency list is ordered alphabetically.
DFS on Figure 22.8:
22/25
1/20 21/26
2/5
3/4
6/19
23/24
11/14
10/17
7/8
15/16
27/28
9/18
12/13
Ordering of vertices:
Exercise 22.4-2
Give a linear-time algorithm that takes as input a directed acyclic graph G = (V, E) and two vertices s and t , and returns the
number of simple paths from s to t in G. For example, the directed acyclic graph of Figure 22.8 contains exactly four simple
paths from vertex p to vertex v: pov, poryv, posryv, and psryv.
(Your algorithm needs only to count the simple paths, not list them.)
Solution:
Add a field to the vertex representation to hold an integer count. Initially, set vertex ts count to 1 and other vertices count to
0. Start running DFS with s as the start vertex. When t is discovered, it should be immediately marked as finished (BLACK),
without further processing starting from it. Subsequently, each time DFS finishes a vertex v, set vs count to the sum of the
counts of all vertices adjacent to v. When DFS finishes vertex s, stop and return the count computed for s.
Page 8 of 8