@@ -17,30 +17,28 @@ class AdjacencyMatrix(Graph):
17
17
"""
18
18
def __new__ (cls , * vertices ):
19
19
obj = object .__new__ (cls )
20
- num_vertices = len (vertices )
21
20
obj .vertices = [vertex .name for vertex in vertices ]
22
21
for vertex in vertices :
23
- obj .__setattr__ (str (vertex .name ), vertex )
24
- obj .matrix = OneDimensionalArray (
25
- OneDimensionalArray ,
26
- num_vertices )
27
- for i in range (num_vertices ):
28
- obj .matrix [i ] = OneDimensionalArray (
29
- bool ,
30
- num_vertices )
31
- obj .matrix [i ].fill (False )
22
+ obj .__setattr__ (vertex .name , vertex )
23
+ obj .matrix = dict ()
24
+ for vertex in vertices :
25
+ obj .matrix [vertex .name ] = dict ()
32
26
obj .edge_weights = dict ()
33
27
return obj
34
28
35
29
def is_adjacent (self , node1 , node2 ):
36
- return self .matrix [node1 ][node2 ]
30
+ node1 , node2 = str (node1 ), str (node2 )
31
+ row = self .matrix .get (node1 , dict ())
32
+ return row .get (node2 , False ) is not False
37
33
38
34
def neighbors (self , node ):
35
+ node = str (node )
39
36
neighbors = []
40
- for i in range (self .matrix [node ]._size ):
41
- if self .matrix [node ][i ]:
37
+ row = self .matrix .get (node , dict ())
38
+ for node , presence in row .items ():
39
+ if presence :
42
40
neighbors .append (self .__getattribute__ (
43
- str (self . vertices [ i ] )))
41
+ str (node )))
44
42
return neighbors
45
43
46
44
def add_vertex (self , node ):
@@ -52,8 +50,9 @@ def remove_vertex(self, node):
52
50
"adjacency matrix for static graphs only." )
53
51
54
52
def add_edge (self , source , target , cost = None ):
55
- self .matrix [source ][target ] = True
56
53
source , target = str (source ), str (target )
54
+ print (source , target )
55
+ self .matrix [source ][target ] = True
57
56
if cost is not None :
58
57
self .edge_weights [source + "_" + target ] = \
59
58
GraphEdge (self .__getattribute__ (source ),
@@ -66,5 +65,6 @@ def get_edge(self, source, target):
66
65
None )
67
66
68
67
def remove_edge (self , source , target ):
68
+ source , target = str (source ), str (target )
69
69
self .matrix [source ][target ] = False
70
70
self .edge_weights .pop (str (source ) + "_" + str (target ), None )
0 commit comments