【问题标题】:DFS/BFS Implementation: Directed GraphDFS/BFS 实现:有向图
【发布时间】:2018-05-13 18:34:39
【问题描述】:

尝试在有向图中显示所有节点时,会显示不正确的节点!

这是怎么回事,我在这里做错了?另外,如何使用图形字典而不是定义所有边,有没有办法使用字典?

预期结果:

1  --> Node(s): ['2', '4']
2  --> Node(s): ['3', '5', '7']
3  --> Node(s): ['1', '6']
4  --> Node(s): ['6']
5  --> Node(s): ['7', '8']
6  --> Node(s): ['8']
7  --> Node(s): ['8', '9']
8  --> Node(s): ['9']

实际结果:

1  --> Node(s): [2, 3, 4]
2  --> Node(s): [1, 3, 5, 7]
3  --> Node(s): [1, 2, 6]
4  --> Node(s): [1, 6]
5  --> Node(s): [2, 7, 8]
6  --> Node(s): [3, 4, 8]
7  --> Node(s): [2, 5, 8, 9]
8  --> Node(s): [5, 6, 7, 9]
9  --> Node(s): [7, 8]

如果使用图形字典为:

graph = {'1': ['2','4'], '2': ['3', '5', '7'], '3': ['1','6'], '4': ['6'], 
         '5': ['7','8'], '6': ['8'], '7': ['8', '9'], '8': ['9']}

代码:

n_nodes = {}

# Search for all nodes and create an empty array for each node
def add_nodes(node_array):
    for node in node_array:
        if node not in n_nodes:
            n_nodes[node] = []

def add_edge(edge):
    u, v = edge
    if (v not in n_nodes[u]) and (u not in n_nodes[v]):
        n_nodes[u].append(v)
        if (u != v):
            n_nodes[v].append(u)

add_nodes([i+1 for i in range(9)])

add_edge((1,2))
add_edge((1,4))
add_edge((2,3))
add_edge((2,5))
add_edge((2,7))
add_edge((3,1))
add_edge((3,6))
add_edge((4,6))
add_edge((5,7))
add_edge((5,8))
add_edge((6,8))
add_edge((7,8))
add_edge((7,9))
add_edge((8,9))

# Print All Nodes
for key in sorted(n_nodes):
    print (key, " --> Node(s):",sorted(n_nodes[key]))

【问题讨论】:

    标签: python-3.x algorithm


    【解决方案1】:

    您的代码将边视为无向边:它们总是在两个方向上相加。所以只需删除添加相反方向边缘的代码即可。

    改变这个:

    if (v not in n_nodes[u]) and (u not in n_nodes[v]):
        n_nodes[u].append(v)
        if (u != v):
            n_nodes[v].append(u)
    

    ...到:

    if v not in n_nodes[u]:
        n_nodes[u].append(v)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多