Skip to content

Commit d186427

Browse files
committed
Merge pull request prakhar1989#10 from Xuefeng-Zhu/patch-3
Several improvements
2 parents de288c9 + c55ad5f commit d186427

1 file changed

Lines changed: 9 additions & 12 deletions

File tree

graphs/graph.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def has_node(self, node):
3838
"""
3939
return node in self.node_neighbors
4040

41-
def add_edge(self, edge, wt=1, label=""):
41+
def add_edge(self, edge, wt=DEFAULT_WEIGHT, label=""):
4242
"""
4343
Add an edge to the graph connecting two nodes.
4444
An edge, here, is a pair of node like C(m, n) or a tuple
@@ -61,17 +61,15 @@ def nodes(self):
6161
"""
6262
Returns a list of nodes in the graph
6363
"""
64-
return list(self.node_neighbors.keys())
64+
return self.node_neighbors.keys()
6565

6666
def has_edge(self, edge):
6767
"""
6868
Returns a boolean to indicate whether an edge exists in the
6969
graph. An edge, here, is a pair of node like C(m, n) or a tuple
7070
"""
7171
u, v = edge
72-
if v not in self.node_neighbors[u]:
73-
return False
74-
return True
72+
return v in self.node_neighbors.get(u, [])
7573

7674
def neighbors(self, node):
7775
"""
@@ -115,14 +113,16 @@ def edges(self):
115113
"""
116114
edge_list = []
117115
for node in self.nodes():
118-
for each in self.neighbors(node):
119-
edge_list.append((node, each))
116+
edges = [(node, each) for each in self.neighbors(node)]
117+
edge_list.extend(edges)
120118
return edge_list
121119

122120
# Methods for setting properties on nodes and edges
123121
def set_edge_weight(self, edge, wt):
124122
"""Set the weight of the edge """
125123
u, v = edge
124+
if not self.has_edge(edge):
125+
raise Exception("Edge (%s, %s) not an existing edge" % (u, v))
126126
self.node_neighbors[u][v] = wt
127127
if u != v:
128128
self.node_neighbors[v][u] = wt
@@ -140,10 +140,7 @@ def get_edge_weights(self):
140140
unique_list = {}
141141
for u in self.nodes():
142142
for v in self.neighbors(u):
143-
if not unique_list.get(v) or u not in unique_list.get(v):
143+
if u not in unique_list.get(v, set()):
144144
edge_list.append((self.node_neighbors[u][v], (u, v)))
145-
if u not in unique_list:
146-
unique_list[u] = [v]
147-
else:
148-
unique_list[u].append(v)
145+
unique_list.setdefault(u, set()).add(v)
149146
return edge_list

0 commit comments

Comments
 (0)