2 回答

TA贡献1951条经验 获得超3个赞
我认为它只需要一点点改变,试试这个:
def get_edges(self):
edges = set()
for key in self.graph:
for adj_node in self.graph[key]:
if ((key, adj_node) not in edges) and ((adj_node, key) not in edges):
edge = (key, adj_node)
edges.add(edge)
else:
pass
return edges
更新:
所以它是一个Undigraph。
是我把它搞得太复杂了。
你的方式实际上比我检查两种方式都要好。
您的代码成功的原因是set它只包含任何值的一个实例。
所以每次执行add,如果已经存在相同的元组,它就不会改变集合。
并且您已经使用if来检查相反方向的元组,因此它不会创建重复的边。
例如,当(a, b)命中if检查时,它会检查(b,a)集合中是否存在,如果存在,则通过。如果不是,则在集合中添加 (a, b),如果 (a, b) 存在,则集合不会改变,因为集合中只有一个实例。
稍后当循环到 (b, a) 时,因为 (a, b) 已经在集合中,所以if将是假的并通过。
所以通过这种方式,集合是安全的,没有重复的边。
添加回答
举报