我不确定如何实现以下问题。我有一个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个以上的子节点)
我无法确定实现树生成的代码是什么,看起来好像是广度优先的一些变化,但我不确定。
答案 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)))