如何列出边缘而不重复?

时间:2019-01-10 11:15:48

标签: python-3.x graph-theory

我创建了一个函数来列出图形的所有边。我需要有关如何修改代码以获取正确输出而不会重复边缘的帮助。这是我尝试过的:

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')]

2 个答案:

答案 0 :(得分:0)

关于python的

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))