Python将数组实现为树然后实现BFS

时间:2017-09-30 23:48:36

标签: python arrays matrix tree breadth-first-search

我不确定如何实现以下问题。我有一个2D数组,我需要变成一个树,其中每个节点的值是从矩阵确定的,但我不知道如何实现正确创建适当的树的方法。这是一个澄清的例子:

    Matrix:


 0[ 3.  1.]
 1[ 6.  4.]
 2[ 2.  0.]
 3[ 5.  3.]
 4[ 1.  6.]
 5[ 4.  2.]
 6[ 0.  5.]
 7[ 3.  1.]`

然后使用该矩阵,我将创建一个树,其中任何给定节点的子节点由矩阵中的数字行确定。例如,如果我选择7作为根,我会得到:

           7
        3     1
      5  3   6  4

并将继续构建树,直到达到零。然后我将路径返回到0.(矩阵可以有两列以上,每个节点生成2个以上的子节点)

我无法确定实现树生成的代码是什么,看起来好像是广度优先的一些变化,但我不确定。

1 个答案:

答案 0 :(得分:0)

我认为这种混乱源于你提出构建树的问题 - 这是不必要的,因为你已经有了图形结构。你在矩阵中的每个元素之间都有链接,因为它实际上不是树(如果它是树,孩子可以指向父节点的循环) - 它已经是一个图形。 / p>

然后,在探索时,应用常规BFS并跟踪路径中每个步骤的路径成为问题:

# graph
m = {
    0: (3, 1),
    1: (6, 4),
    2: (2, 0),
    3: (5, 3),
    4: (1, 6),
    5: (4, 2),
    6: (0, 5),
    7: (3, 1),
}

# seed queue
queue = [(7, [])]

# bfs
while (queue):
    idx, path = queue.pop(0)
    path.append(idx)

    for n_idx in m[idx]:
        # check if the next node would be a 0
        if not n_idx:
            print(path)
            queue = []
            break

        # append the next index and a copy of the current path object    
        queue.append((n_idx, list(path)))