@@ -17,30 +17,28 @@ class AdjacencyMatrix(Graph):
1717 """
1818 def __new__ (cls , * vertices ):
1919 obj = object .__new__ (cls )
20- num_vertices = len (vertices )
2120 obj .vertices = [vertex .name for vertex in vertices ]
2221 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 ()
3226 obj .edge_weights = dict ()
3327 return obj
3428
3529 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
3733
3834 def neighbors (self , node ):
35+ node = str (node )
3936 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 :
4240 neighbors .append (self .__getattribute__ (
43- str (self . vertices [ i ] )))
41+ str (node )))
4442 return neighbors
4543
4644 def add_vertex (self , node ):
@@ -52,8 +50,9 @@ def remove_vertex(self, node):
5250 "adjacency matrix for static graphs only." )
5351
5452 def add_edge (self , source , target , cost = None ):
55- self .matrix [source ][target ] = True
5653 source , target = str (source ), str (target )
54+ print (source , target )
55+ self .matrix [source ][target ] = True
5756 if cost is not None :
5857 self .edge_weights [source + "_" + target ] = \
5958 GraphEdge (self .__getattribute__ (source ),
@@ -66,5 +65,6 @@ def get_edge(self, source, target):
6665 None )
6766
6867 def remove_edge (self , source , target ):
68+ source , target = str (source ), str (target )
6969 self .matrix [source ][target ] = False
7070 self .edge_weights .pop (str (source ) + "_" + str (target ), None )
0 commit comments