我正在尝试实现一种返回图形边缘的方法,由邻接列表/字典表示。
所以要遍历字典,首先我遍历键,然后遍历存储在相应键中的每个值。在嵌套的 for 循环中,我有一个条件,如果特定的边,比如说 (a,b) 不在边的集合中,那么将它添加到集合中——否则通过。在我第一次运行时,该方法采用了相同的边——也就是说,在边的集合中,有 (a,b) 和 (b,a)。
class Graph():
def __init__(self, grph={}):
self.graph = grph
def get_vertices(self):
for keys in self.graph:
yield keys
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:
edge = (key, adj_node)
edges.add(edge)
else:
pass
return edges
def main():
graph1 = {
'A': ['B','C','D'],
'B': ['A','E'],
'C': ['A', 'D'],
'D': ['A', 'C'],
'E': ['B'],
}
graph_one = Graph(graph1)
print(list(graph_one.get_vertices()))
print(graph_one.get_edges())
if __name__ =='__main__':
main()
输出是:
{('A','B'),('D','A'),('B','A'),('B','E'),('A','D') ,('D','C'),('E','B'),('C','D'),('A','C'),('C','A') }
所以我所做的是,我只是改变了 if 语句:
“if (adj_node, key) not in edge:”
def get_edges(self):
edges = set()
for key in self.graph:
for adj_node in self.graph[key]:
if (adj_node, key) not in edges:
edge = (key, adj_node)
edges.add(edge)
else:
pass
return edges
现在输出是:
{('C','D'),('A','B'),('E','B'),('A','C'),('A','D') }
我很好奇为什么会这样,如果你们能向我解释一下,我将非常感激。提前致谢!
饮歌长啸
相关分类