Python 将数组实现为树然后实现 BFS
Python Implementing array as tree then implementing BFS
我不确定如何解决以下问题。我有一个二维数组,我需要把它变成一棵树,其中每个节点的值都由矩阵确定,但我不确定如何实现正确创建适当树的方法。这里有一个例子来说明:
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.]`
然后我将使用该矩阵创建一棵树,其中任何给定节点的 children 由矩阵行中的数字确定。例如,如果我选择 7 作为根,我会得到:
7
3 1
5 3 6 4
并将继续构建树,直到达到零。然后我会 return 到 0 的路径。(矩阵可以有超过 2 列,每个节点生成超过 2 children)
我无法确定实现树生成的代码是什么,它似乎是 breadth-first 的一些变体,但我不确定。
我认为混淆源于您询问有关构建树的问题 - 这不是必需的,因为您已经构建了图形。您在矩阵中的每个元素之间都有链接,并且由于它实际上不是树(如果它是树,则子项可以指向父项的循环) - 它已经是一个图。
然后就是应用常规 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)))
我不确定如何解决以下问题。我有一个二维数组,我需要把它变成一棵树,其中每个节点的值都由矩阵确定,但我不确定如何实现正确创建适当树的方法。这里有一个例子来说明:
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.]`
然后我将使用该矩阵创建一棵树,其中任何给定节点的 children 由矩阵行中的数字确定。例如,如果我选择 7 作为根,我会得到:
7
3 1
5 3 6 4
并将继续构建树,直到达到零。然后我会 return 到 0 的路径。(矩阵可以有超过 2 列,每个节点生成超过 2 children)
我无法确定实现树生成的代码是什么,它似乎是 breadth-first 的一些变体,但我不确定。
我认为混淆源于您询问有关构建树的问题 - 这不是必需的,因为您已经构建了图形。您在矩阵中的每个元素之间都有链接,并且由于它实际上不是树(如果它是树,则子项可以指向父项的循环) - 它已经是一个图。
然后就是应用常规 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)))