我创建了一个函数来列出图形的所有边。我需要有关如何修改代码以获取正确输出而不会重复边缘的帮助。这是我尝试过的:
def edges(A):
node_list = [ ]
for vertex in A:
for neighb in A[ vertex ]:
node_list.append(( vertex, neighb ))
return(node_list)
data = {
'A' : ['A', 'B', 'C'],
'B' : ['C','A'],
'C' : ['C', 'D'],
'D' : ['E'],
'E' : []
}
print("List of edges: ", edges(data))
输出:
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'C'),
('B', 'A'), ('C', 'C'), ('C', 'D'), ('D', 'E')]
答案 0 :(得分:0)
idk,但是您可以为边缘保留布尔值isTraversed,默认值为false。如果遍历egde,则将值更改为true。并且在if语句中,如果isTraversed值为false,则可以打印边缘。
答案 1 :(得分:0)
一个简单的解决方案是使用一组存储边,并在内部对每个边进行排序(即,具有较低词典值的节点将是第一个)。使用一组,您将不会有重复的边,并且在内部对每个边进行排序将有助于避免同时保留(A,B)和(B,A)。如果是有向图,则可以跳过节点排序部分。 Python实现:
def edges(A):
edges = set()
for vertex in A:
for neighb in A[vertex]:
first = min(vertex, neighb)
second = neighb if first == vertex else vertex
edges.add((first, second))
return list(edges)
data = {
'A' : ['A', 'B', 'C'],
'B' : ['C','A'],
'C' : ['C', 'D'],
'D' : ['E'],
'E' : []
}
print("List of edges: ", edges(data))