10. %$#%/- !-%//
QKKKM N LK
0DSLPDJH‹VRXUFHXQNQRZQ$OOULJKWVUHVHUYHG7KLVFRQWHQWLVH[FOXGHGIURPRXUUHDWLYH
RPPRQVOLFHQVH)RUPRUHLQIRUPDWLRQVHHKWWSVRFZPLWHGXKHOSIDTIDLUXVH
11. *%'#
*'.*/7/0(3/$)$.,#
W */=,*$)0/5#..*/)*.(0
W /=*))1*)/05),*$)0/
W ##/5$#0
W 6,01(0*0.*(/*3.)*0*/1)1*))**.0#0
W $/0)05)/*3.)/1)1*))*/
W 4./,*0.4'05)/*3.)/1)1*))*/
*'4.,#*,1($81*),.*'(
W #*.0/05$#0,0#05)(7#*3/)(7*
LL
QKKKM N
,PDJHV‹VRXUFHVXQNQRZQ$OOULJKWVUHVHUYHG7KLVFRQWHQWLVH[FOXGHGIURPRXU UHDWLYH
RPPRQVOLFHQVH)RUPRUHLQIRUPDWLRQVHHKWWSVRFZPLWHGXKHOSIDTIDLUXVH
13. #%, %5 #
#$/'))*
#.$)3)$.0
*'/0.0/57$..'4)00$'/
W $8*$/')/
W )0#*.$/
/0#.,0#0#0*)0$)/#60'7*);
W
QKKKM N LN
14. !$ !(,%$
3$'$).,#/
W */
W /
W 10#$)0*0#.0*(.,#/
/$).,#/
W .#$)*.,0#/05))*/
W .#$)*.*,1(',0#/05))*/
QKKKM N LO
15. #
class Node(object):
def __init__(self, name):
Assumes name is a string
self.name = name
def getName(self):
return self.name
def __str__(self):
return self.name
QKKKM N LP
16. class Edge(object):
def __init__(self, src, dest):
Assumes src and dest are nodes
self.src = src
self.dest = dest
def getSource(self):
return self.src
def getDestination(self):
return self.dest
def __str__(self):
return self.src.getName() + '-’
+ self.dest.getName()
QKKKM N LQ
18. %$3$%'9
class Digraph(object):
edges is a dict mapping each node to a list of
its children”
def __init__(self):
self.edges = {}
def addNode(self, node):
if node in self.edges:
raise ValueError('Duplicate node')
else:
self.edges[node] = []
def addEdge(self, edge):
src = edge.getSource()
dest = edge.getDestination()
if not (src in self.edges and dest in self.edges):
raise ValueError('Node not in graph')
self.edges[src].append(dest)
QKKKM N LS
mappi
ing each
h nod
de list
19. %$3$%':
def childrenOf(self, node):
return self.edges[node]
def hasNode(self, node):
return node in self.edges
def getNode(self, name):
for n in self.edges:
if n.getName() == name:
return n
raise NameError(name)
def __str__(self):
result = ''
for src in self.edges:
for dest in self.edges[src]:
result = result + src.getName() + '-'
+ dest.getName() + 'n'
return result[:-1] #omit final newline
QKKKM N LT
20. %$
class Graph(Digraph):
def addEdge(self, edge):
Digraph.addEdge(self, edge)
rev = Edge(edge.getDestination(), edge.getSource())
Digraph.addEdge(self, rev)
.,#*/)*0#4$.1*)'$07//*$05$0#)
W /''*5,//$)$0#.$.1*)
#7$/.,#/3'//*$.,#;
((.0#/3/1031*).3';
W '$)0*5*./*..0'73/$))$)/0)*0#
/3,.07,$0/#*3''/*5*.*..0'75#))$)/0)*
0#/307,$//3/1030*.0#$)/0)*0#/3,.07,
)7,.*.(0#05*./5$0#$.,#5$'''/*5*.5$0#
.,#E30)*0F
QKKKM N MK