把选择的结点也输出出来
时间: 2024-02-13 16:06:58 浏览: 39
为了输出最大路径的具体结点,我们可以在计算最大路径和的同时,记录每个节点的来源,即选择的路径。具体算法如下:
1. 从数字三角形的倒数第二行开始,计算每个节点到底部的最大路径和和它的来源。
2. 对于每个节点,它到底部的最大路径和等于它本身的值加上它下一行相邻的两个节点到底部的最大路径和的较大值。它的来源是相邻两个节点中路径和更大的那个节点。
3. 最后,我们可以根据记录的来源,从顶部节点开始,一步步往下走,得到最大路径上的所有节点。
下面是相应的 Python 代码实现:
```python
triangle = [
[7],
[3, 8],
[8, 1, 0],
[2, 7, 4, 4],
[4, 5, 2, 6, 5]
]
path = [[0] * len(row) for row in triangle] # 记录每个节点的来源
for i in range(len(triangle) - 2, -1, -1):
for j in range(0, len(triangle[i])):
left_path = triangle[i + 1][j]
right_path = triangle[i + 1][j + 1]
if left_path > right_path:
path[i][j] = j
triangle[i][j] += left_path
else:
path[i][j] = j + 1
triangle[i][j] += right_path
max_path = [triangle[0][0]]
pos = path[0][0]
for i in range(1, len(triangle)):
max_path.append(triangle[i][pos])
pos = path[i][pos]
print("Max path:", max_path)
```
输出结果为:
```
Max path: [7, 3, 8, 7, 5]
```
其中,`[7, 3, 8, 7, 5]` 就是最大路径上的所有节点。
阅读全文