Beruflich Dokumente
Kultur Dokumente
Robert Tarjan
Computer Science Department
Stanford University
Stanford, California
Sl.UlIDlary
114
defines a spanning tree of G'. In general, the arc~ Each arc of the original graph is directed in at
of G' which are not part of the spanning tree inter- least one direction; if (v,w) does not become an arc
connect the paths in the tree. However, if the search of the spanning tree T, either v - ..... w or w - ..... v
is depth-first, each edge (v,w) not in the spanning must be constructed, since both v and ware
tree connects vertex v with one of its ancestors w. numbered whenever edge (v,w) is inspected and either
NUMBER(v) < NUMBER(w) or NUMBER (v) > NUMBER(w)
Definition 2: Let P be a directed graph, consisting The arcs v ..... w run from smaller numbered points
of two disjoint sets of edges, denoted by v ~ wand to larger numbered poilJ,ts. The arcs v - ..... w run from
v -~ w respectively. Suppose P satisfies the larger numbered points to smaller numbered points. If
following properties: arc v - ..... w is constructed, arc w ..... v is not con-
(i) The subgraph containing the edges v -+ w is a structed later because both v and ware numbered.
spanning tree of P If arc w ..... v is constructed, arc v - ..... W is not
* -1 , where rr ~tf and tf _~tf later constructed, because of the test " w --, = u" in
(ii) We have _~C (~) procedure DFS. Thus each edge in the original graph
denote the relations defined by the corresponding is directed in one and only one direction.
sets of edges. Let T be the graph defined by the arcs v ..... w
Then P is called a palm tree. The edges v - ..... ware u
called the fronds of P . constructed during execution of DFS(u, ) . The
argwnent above which shows that T is a
spanning tree
Theorem 1: Let P be the directed graph generated by also shows that T is a tree rooted at u. Consider
u
a depth-first search of a connected graph G. Then an arc v - ..... w. We have NUMBER(W) < NUMBER(v)
P is a palm tree. Conversely, let P be any palm Thus w is numbered before edge (w,v) is inspected,
tree. Then P is generated by some depth-first and v is a vertex in T This means that
search of the undirected version of P. .\ * w
w ..... v , and P is a palm tree.
Proof: Consider the program listed below, which Let us prove the converse part of the theorem.
carrles out a depth-first search of a connected gre~h, Suppose that P is a palm tree, with spanning tree T
starting at vertex s, using an adjacency structure and undirected version G. Construct an adjacency
of the graph to be searched. The program numbers the structure of G in which all the edges of T appear
vertices of the graph in the order they are reached before the other edges of G in the adjacency lists.
during the search and constructs the directed grapb Starting with the root of T, perform a depth-first
(p) generated by the search. search using this adjacency structure. The search will
traverse the edges of T preferentially and will
begin generate the palm tree P; it is easy to see that
integer i; each edge is directed correctly. This completes the
procedure DFS(v,u); proof of the theorem.
begin
~ER(v) := i := i+l; We may state Theorem 1 non-constructively as:
for w in the adjacency list of v do
-begin Corollary 2: Let G be any 1llldirect ed graph. Then
if w is not yet numbered then G can be converted into a pah tree by directing its
- begin edges in a suitable manner.
---COnstruct arc v ..... w in P;
DFS(w,v); Biconnectivity
end
elseIf NUMBER(w) < NUMBER(v) The value of depth-first search follows from the
--andw --, = u then simple structure of a palm tree. Let us consider a
construct arc v - ..... w in P; problem in which this structure is useful.
end; Definition 3: Let G = (v,e) be an undirected graph.
i := 0; Suppose that for each triple of distinct vertices
DFS(s,O);
end; v,w,a in v, there is a path p: v ~ * w such that a
is not on the path P. Then G is biconnected. If,
Suppose P = (v,e) is the directed graph gener- on the other hand, there is a triple of distinct ver-
ated by a depth-first search of some connected graph G, tices v, w, a in v such that a is on any path
and assume that the search begins at vertex s * w , and there exists at least one such path,
Examine the procedure DFS. The algorithm clearly p: v ~
tenninates because each vertex can only be numbered then a is called an articulation point of P.
once. Furthermore, each edge in the graph is examined
exactly twice. Therefore the time required by the Lemma 3: Let G = (v,e) be an undirected graph. We
search is linear in V and E. may define an equivalence relation on the set of edges
For any vertices v and w, let d(v,w) be the as follows: two edges are equivalent if and only if
length of the shortest path between v and w in G. they belong to a common cycle. Let the distinct
Since G is connected, all distances are finite. equivalence classes under this relation be e ,
i
Suppose that some vertex remains unnumbered by the 1 SiS n , and let G. = (v.,e.) ,where V. is the
search. Let v be an unnumbered vertex such that 111 1
d(s,v) is minimal. Then there is a vertex w such set of vertices incident to the edges of ei ;
that w is adjacent to v and d(s,w) < d(s,v) Vi = [vl~wv,w)Eei)} Then
Thus w is numbered. But v will also be numbered, (i) G. is biconnected, for each 1 < i < n
since it is adjacent to w This means that all 1
vertices are numbered during the search. (ii) No G is a proper subgraph of a biconnected
i
The vertex s is the head of no edge w ..... s subgraph of G .
Each other vertex v is the head of exactly one edge ( iii) Each articulation point of G occurs more than
w v. The subgraph T of P defined by the edges once among the Vi' I < i < n. Each non-
v w is obviously connected. Thus T is a spanning
tree of P. articulation point of G occurs exactly once
among the Vi' 1 < i < n .
115
( i v) The set Vi n Vj contains at most one point, components of a graph G, starting fran vertex s
for any I < i, j < n. Such a point of inter- begin
section is an
articulation point of the graph. -rnteger i;
The subgraphs G. of G are called the biconnected procedure BICONNECT(v,u);
components of GJ.. begin
NUMBER(v) := i := i+l;
Proof: An exercise for the reader. LOWPr( v) = NUM:BER( v) ;
for w in the adjacency list of v do
Suppose we wish to determine the biconnected begin
components of an illldirected graph G. Common algo- if w is not yet numbered then
ritlnns for this purpose, for instance Shirey' slO, test begin
each vertex in turn to discover if it is an articula- add (v,w) to stack of edges;
tion point. Such algorithms require time proportional BICO~T(w,v);
to VE ,where V is the number of vertices and E LOWPI'(v) := min(LOWPT(v),LOWPT(w));
is the number of edges of the graph. A more efficient if LOWPI'(w) ? NUMBER(v) then
algorithm uses depth-first search. Let P be a paJm begin
tree generated by a depth-first search. Suppose the
start new biconnected component;
vertices of P are numbered in the order they are
for, (u ' u ) on edge stack with
reached during the search (as is done ,by the procedure l 2
DFS above). We shall refer to vertices by their :NUMBER ( u ) > NUMBER( v) do
l
numbers. If u is an ancestor of v in the spanning
delete (u ,u ) from edge stack
tree T of P, then u < v. For any vertex v in l 2
P , let LOWPI'(v) be the smallest vertex in the set and add it to current component;
[v} U [wlv *.... --+ w}. The following results form the delete (v,w) from edge stack and add
it to current component;
basis of an efficient algorithm for finding biconnected
end;
components.
end
else-if NUMBER(w) < NUMBER(v) and WI = u then
Lennna 4: Let G be an illldirected graph and let P be begin --
a paJm tree formed by directing the edges of G. Let
add (v, w) to edge stack;
T be the spanning tree of P. Suppose p: v ~* w is LOWPr(v) :=min(LOWPr(v) ,NUMBER(w)) ;
any path in G. Then P, contains a point which is end;
an ancestor of both v and w in T end;--
end;-
Proof: Let T with root u be the smallest subtree i := 0;
u
for w a vertex do if w is not yet numbered then
of T containing all vertices on the path p. If BICONNECT(w,O)'; -
u = v or u = w the lemma is immediate. otherwise, end;
let T be the subtree containing v, and let T
u u
l 2 The edges of G are placed on a stack as they
be the subtree containing w, such that u -+ u and are traversed; when an articulation point is found the
l
u -+ u . Since T is minimal, u -, = u Then corresponding edges are all on top of the stack. (If
2 u l 2 (v,w) ET and LOWPrl(w) > LOWPrI(v) , then the corres-
path p can only get from T to T by passing ponding biconnected component contains the edges in
u u
l 2 [(u ,u )lw ~ u } U [(v,w)} which ,are on the edge
through vertex u, since no point in one of these l 2 l
trees is an ancestor of any point in the other, while stack.) A single search on each connected component
both .... and --+ connect only ancestors in a palm of a graph G will give us all the biconnected com-
tree. Since u is an ancestor of both v and w, ponents of G
the lermna holds.
6: The biconnectivity algorithm requires
Lemma 5: Let G be a connected undirected graph.
Let P be a paJm tree formed by directing the edges
Theorem
(V, E) space when applied to a graph with V vertices
and E edges.
of G, and let T be the spanning tree of P.
Suppose a,v,w are distinct vertices of G such Proof: The algorithm clearly requires space bounded
that (a, v) ET , and suppose w is not a descendant of by kl V+k2 E + k ' for some constants k , k2 ' and
3 l
v in T. (That is, ...,(v *.... w) in T .) If k . The algorithm is an elaboration of the depth-
LOWPr(v) > a then a is an articulation point of P 3
and removal of a disconnects v and w first search procedure DFS. During the search,
LOWPI' values are calculated and each edge is placed
Proof: If a .... v and LOWPr(v) > a , then any path on the edge stack once and removed from the edge stack
from v not passing through a -remains in the sub- once. The amount of extra time required by these
operations is proportional to E. Thus BICONNECT has
tree Tv' and this subtree does not contain the
a time bound linear in V and E
point w. This gives the lemma. Figure I shows a
graph, its LOWPr values, articulation points, and Theorem 7: The biconnectivity algorithm correctly
biconnected components. gives the biconnected components of any undirected
graph G.
The LOWFT values of all the vertices of a palm
tree P may be calculated during a single depth-first Proof: The actual depth-first search undertaken by
search, since LOWFT(v) = min([NUMBER(v)} U the algorithm depends on the adjacency structure chosen
I
[LOWPr(w) v -+ w} U [NUMBER(w) \v --+ w}) On the basis to represent G; we shall prove that the algorithm is
of such a calculation, the articulation points and the correct for all adjacency structures. Notice first
biconnected components may be determined, all during that the biconnectivity algorithm analyzes each con-
one search. The bicormectivity algorithm is presented nected component of G separately to find its bicon-
below. The program will compute the bicormected nected components, applying one depth-first search to
116
each connected component. Thus we need only prove Lemma 8: Let G = (v,e) be a directed graph. W~ may
that the biconnectivity algorithm works correctly on defJ.ne an equivalence relati on on the set of vertlces
connected graphs G. as follows: two vertices v and ware equivalent
The correctness proof is by induction on the if there is a closed path p: v ~* v which cont alns
. w.
number of edges in G. Suppose G is connected and Let the distinct equivalence classes under this
contains no edges. G either is empty or consists of relation be 1(., 1 -< i -< n. Let G.1 = (v.,e.)
a single point. The algorithm will terminate after 1 11
examining G and listing no components. Thus the where ei = [(v,w) E e\v,w E Vi} Then:
algorithm operates correctly in this case. (i) Each G. is strongly connected.
Now suppose that the algorithm works correctly on 1
all connected graphs with E-l or fewer edges. Con- (ii) No G. is a proper subgraph of a strongly
1
sider applying the algorithm to a connected graph G connected subgraph of G.
with E edges. Each edge placed on the stack of The subgraphs G. are called the strongly connected
edges is eventually removed and added to a component components of G.
1
since everything on the edge stack is removed whenever
the search returns to the root of the palm tree of G. Proof: An exercise for the reader.
Consider the situation when the first component G' is
formed. Suppose that this component does not include Suppose we wish to determine the strongly con-
all the edges of G. Then the vertex v currently nected components of a directed graph. Purdom9 and
being examined is an articulation point of the graph
and separates the edges in the component from the Munro7 present virtually identical algorithms for
other edges in the graph by Lemma 5. solving this problem using depth-first search (although
Consider only the set of edges in the component. they do not mention this fact explicitly). Purdom
If BICONNECT(v,O) is executed, using the graph G' as o
cla:iJns a time bound of k-V:- for his algorithm; Munro
data, the steps taken by the algorithm are the same as claims k max(E,V log V) , where the graph has Vver-
those taken during the analysis of the edges of G' tices and E edges. Their algorithm attempts to con-
when the data consists of the entire graph G. Since struct a cycle by starting from a point and beginning
G' contains fewer edges than G, the algorithm oper- a depth-first search. When a cycle is found, the
ates correctly on G' and Gt must be biconnected. vertices on the cycle are marked as being in the same
If we delete the edges of G' 'rom G, we get another strongly connected component and the process is re-
subgraph G" with fewer edges than G since G' is peated. The algorithm has the disadvantage that two
not empty. The algorithm operates correctly on G" small strongly connected components may be collapsed
by the induction assumption. The behavior of the into a bigger one; the resultant extra work in relabel-
algorithm on G is s:iJnply a composite of its behavior
on G' and on G" ; thus the algorithm must operate ling may contribute -V2 steps using a simple approach,
correctly on G. or V log V steps if a more sophisticated approach is
Now suppose that only one component is found. We used (see Munro7). A more careful study of what a
want to show that in this case G is biconnected. depth-first search does to a directed graph reveals
Suppose that G is not biconnected. Then G has an that the extensive relabelling of the Purdom-Munro
articulation point a. Consider the connected com- algorithm may be avoided and an O(V,E) algorithm may
ponents left when a is deleted from the graph. One be devised.
of them contains all the ancestors of a; one must Consider what happens when a depth-first search
contain only descendants of a. The component which is performed on a directed graph G. The set of edges
contains only descendants of a also contains some which lead to a new vertex when traversed during the
point v such that (a,v)ET, where T is the search form a tree. The other edges fall into three
spanning tree generated by the search. Since the classes. Some are edges running from ancestors to
component containing v has only descendants of a descendants in the tree. These edges may be ignored,
as vertices, it must be true that LOWPr(v)? a because they do not affect the strongly connected
But this is a contradiction, because the articulation components of G. Some edges run from descendants to
point test would have succeeded when vertex a was ancestors in the tree; these we may call fronds as
examined and more than one biconnected component would above. other edges run from one subtree to another in
be generated. This is contrary to the assumption that the tree. These, we call vines. If the vertices of
only one component was found. Thus G must be bicon-
the tree are numbered in the order they are reached
nected, and the algorithm works correctly in this case.
during the search, a vine (v,w) always has
By induction, the biconnectivity algorithm gives
NUMBER (v) > NUMBER(w) , as the reader may easily show.
the correct components when applied to any connected We shall denote tree edges by v - w and fronds by
graph, and hence when applied to any graph.
v --was before; we use v --- w to denote vines.
Suppose G is a directed graph, to which a
Strong Connectivity depth-first search algorithm is applied repeatedly
until all the edges are explored. The process will
create a set of trees which contain all the vertices
The biconnectivity algorithm shows how useful of G, called the spanning forest F of G, and
depth-first search can be when applied to undirected sets of fronds and vines. (other edg~s are thrown
graphs. However, when a directed graph is searched in away.) Suppose the vertices are numbered in the order
a depth-first manner, a s:iJnple palm tree structure they are reached during the search and that we refer
does not result, because the direction of search on to vertices by their number. Then we have the
each edge is fixed. The more complicated structure following results:
which results in this case is still simple enough to
prove useful in at least one application. Lemma 9: Let v and w be vertices in G which lie
in the same strongly connected component. Let u be
Definition 4: Let G be a directed graph. Suppose the highest numbered common ancestor of v and w
that for each pair of vertices v,w in G, there in F, a spanning forest of G generated by repeated
exist paths PI: v *
~ w and P2: w *
~ v. Then G is depth-first search. Then u lies in the same strongly
connected component as v and w
said to be strongly connected.
117
Proof: Without loss of generality we may assume connected components of a directed graph in O(V,E)
v < w. We prove the lemma by. induct ion "cnv time may be based on such a calculation. .An implemen-
Suppose v = 1 . Then w is a descendant of v in tationof such an algorithm is presented below.. The
F. This is true since the search explores all paths points which have been reached during the search but
emanating from v. Thus u = v and the lemma is which have not yet been placed in a component are
true, trivially. stored on a stack. This stack is analogous to the
Suppose the lemma is true for all v < k. Let stack of edges used by the biconnectivity algoritJ:un.
v = k. * w. If p con~
Consider any path p: v ~ begin
tains no vertices x < v , then w must be a descen- integer i;
dant of v, because p can neve~ leave the subtree procedure STRONGCONNEJT(v);
Tv ' and the result holds. otherwise, let x be the begin
first point on path p such that x < v. Vertex x :oowP.r ( v) : = LCMVINE( v) : = NUMBER (v) - i - i +1;
lies "in the same strongly connected cc:mponent as w, put v on stack of points;
and by the induction hypothesis the highest common forw in the adjacency list of v do
ancestor u ' of x and w also lies in this compo- begin -
nent. The descendants of u I fonn an interval if w is not yet numbered then
(u',u'+i) which contains x and w and hence con- -begin canment (v,w) is a tree arc;
tains v. Thus u' is a cormnon ancestor of v and STRONGCONNEX:T (w) ;
w. Vertex u is a descendant of u' , since u is LOWPl'(v) :=min(LOWPr( v), LOWPI'(w)) ;
the highest numbered camnon ancestor of v and w IOt1VINE ( v) : = min {LOWvmE ( v) , LOWVINE (w) ) ;
Thus u must be in the same strongly connected compo- end
nent as v and w since there is a path else-if w is an ancestor of v do
begin comment (v,w) is a frond;
p':u' *
.... u * * *
.... v~w~u'
WWP1'{v) :=min(LOWPr( v) ,NUMBER(w) ;
The lemma thus follows by induction. The proof end
implies that v and w actually have a common else if NUMBER(w) < NUMBER(v) do
ancestor in F, which is implicit in the statement of begin canment (v,w) is a vine;
the lemma. if w is on stack of points then
LCMVINE{v) :=min(LOWVINE(v) ,NUMBER(w ;
Corollary 10: Let C be a strongly connected canpo- end;
nent in G. Then tbe vertices of C define a subtree end;--
of a tree in F, the spanning forest of G. The root i~\LCMPl'(v) = NUMBER ( v)) and
of this subtree is called the root of the strongly TLOWVINE(v) = NUMBER{v) then
connected component C -- begin camnent v is the root of a component;
start new strongly cormected component;
The problem of finding the strongly connected while w on top of point stack satisfies
components of a graph G thus reduces to the problem
NUMBER(w) > NUMBER ( v) do
of finding the roots of the strongly connected compo- delet e w-from point stack and put w in
nents, just as the problem of finding the biconnected current component;
canponents of an undirected graph reduces to the prob- end;
lem of finding the articulation points of the graph. end;--
We can construct a simple test to determine if a ver- i := 0;
tex is the root of a strongly connected component. If for w a vertex if w is not yet numbered then
I
Lemma 11: Let G be a directed graph with LOWPI' and Proof: An exercise for the reader.
LOWVINE defined as above relative to some spanning
forest F of G generated by depth-first search. Theorem 13: The algorithIn for finding strongly
Then v is the root of some strongly connected compo- connected components works correctly on any directed
nent of G if and only if LOWPr(v) = v and graph G.
LOWVINE( v) = v
Proof: The calculation of LOWPI'(v) performed by the
Proof: Obviously, if v is the root of a strongly algorithm is correct, since it is exactly the same
connected component C of G, then LOWPr(v) = v as that performed by the bicormectivity algorithm. We
and LOWVINE(v) = v, since if LOWPr(v) < v or prove by induction that the calculation of LOWVINE(v)
LOWVINE(v) < v , some proper ancestor of v would be is correct. Suppose as the induction hypothesis that
in C and v could not be the root of C for all vertices v such that v is a proper descen-
Consider the converse. Suppose u is the root of dant of vertex k or v < k, LOWVINE( v) iscomputed
a strongly connected component C of G, and v is correctly. This means that the test to determine if v
a vertex in C different from u. There must be a is the root of a component is performed correctly for
* u. Consider the first edge on this path all such vertices v. The reader may verify that this
path p: v => somewhat strange induction hypothesis corresponds to
which leads to a vertex w not in the subtree T
v considering vertices in the order they are examined for
If this edge is a frond we must have LOWPI'(v) < w < v . the last time during the depth-first search process.
If this edge is a vine, we must have LOWVINE(v) < w
Consider vertex v = k. Let v * .... WI and let
< v , since the highest numbered common ancestor of v
and w is in C . Figure 2 shows a directed graph, wl ---+ w2 be a vine such that w
2
< v. The highest
its LOWPI' and LOWVINE values, and its strongly connected
cammon ancestor u of v and w is also the highest
components. 2
LOWPI' and LOWVINE may be calculated using depth- common ancestor of WI and w . If u is not in the
2
first search. An algorithm for computing the strongly
118
same strongly connected component as w ' then there References
2
must be a strongly connected component root on the tree
[1] Harary, Frank. Graph Theory. Addison-Wesley
path u *-+ w2
Since w < v , this root was dis-
2
Publishing Company, Reading, Massachusetts, 1969.
covered and w2 was removed from the stack of points [2] Hopcroft, J. and Tarjan, R. "Efficient Algori-
thms for Graph Manipulation." Stanford Computer
and placed in a component before the edge wI ---+ w
2 Science Department Technical Report No. 207,
is traversed during the search. Thus WI ---+ w will March, 1971.
2
not enter into the calculation of LOWVINE(v) . On [3] Hopcroft, J. and Tarjan, R. "A V2 Algorithm
the other hand, if u is in the same strongly con- for Determining Isomorphism of Planar Graphs."
nected component as w2 ' there is no component root Information Processing Letters 1 (1971), 32-34.
r ---, = u on the branch u
-+ w *
2 ' and v ---+ w2 will be [4] Hopcroft, J. and Tarjan, R. "Planarity Testing
used to calculate LOWVINE(W ) , and also LOWVINE(v) , in V log V Steps: Extended Abstract."
2 Stanford Computer Science Department Technical
as desired. Thus LOWVINE (v) is calculated correctly, Report No. 201, February, 1971.
and by induction LOWVINE is calculated correctly for
all vertices. [5] Hopcroft, J. "An NlogN Algorithm for Iso-
Since the algorithm correctly calculates LOWPr morphism of Planar Triply Connected Graphs."
and LOWvnm, it correctly identifies the roots of the Stanford Computer Science Department Technical
strongly connected components. If such a root u is Report No. 192, January, 1971.
found, the corresponding component contains all the [ 6] Golomb, S. W. and Baumert, L. D. "Backtrack
descendants of u which are on the stack of points Programming." JACM 12, 4 (Oct. 1965), 516-524.
when u is discovered. These vertices are all on top
of the stack of points, and are all put into a compo- [7] Munro, Ian "Efficient Determination of the
nent by STRONGCONNECT. Thus STRONGCO~T works Strongly Connected Components and Transitive
correctly. Closure of a Directed Graph." Department of
Computer Science, University of Toronto, 1971.
Further Applications [8] Nilson, Nils J. Problem Solving Methods in
Artificial Intelligence. 1970, unpublished.
We have seen how the depth-first search method
may be used in the construction of very efficient [9] Purdom, Paul W. "A Transitive Closure Algorithm."
graph algorithms. The two algorithms presented here Computer Science Technical Report No. 33,
are in fact opt:iJnal to within a constant factor, since University of Wisconsin Computer Sciences
every edge and vertex of a graph must be examined to Department, July, 1968.
determine a solution to one of the problems. (Given [10] Shirey, R. W. "Implementation and Analysis of
a suitable theoretical framework, this statement may Efficient Graph Planarity Testing Algorithms."
be proved rigorously.) The similarity between bicon- Ph.D. Thesis, University of Wisconsin Computer
nectivity and strong connectivity revealed by the Sciences Department, June, 1969.
depth-first search approach is striking. The possible [11] Tarjan, R. "An Efficient Planarity Algorithm."
uses of depth-first search are very general, and are To be published as a Stanford Computer Science
certainly not l:iJnited to the examples presented. An Department Technical Report.
algorithm for finding triconnected components in
O(V, E) time may be constructed by extending the
biconnectivity algorithm. An algorithm for testing
the planarity of a graph in O(V) time 11 is also
based on depth-first search. Combining the connecti-
vity algorithms, the planarity algorithm, and an
algorithm for testing isomorphism of triconnected
planar graphs,5 we may devise an algorithm to test
isomorphism of arbitrary planar graphs in O(V log V)
t:iJne. Depth-first search is a powerful technique with
many applications.
AcknOWledgments
119
f
3 . . - -.....- - . . 5
4[2] 6[1]
(
6 \ 3[2]
9---- all
\
,, 8[7]
'-+
8 2[1] *
1[1] *
(a)
4t:>3 8 (b)
!
1
2 57Z\ 9
6
2
(c)
120
6* [6, 6]
8
5[3,5]
/
",
----
/
~ 4[3,4] 8[1,8J
4 .....~-~f-----f---~----~3
" /
I
/
/
/
/
/
L:(
*
1 [1,1]
7
(a) (b)
6
5
8
7
1
(c)
121