在Pascal中回溯:找到最大的加权分支

让·弗朗索瓦·克卢特

我已经学习Pascal(使用Free Pascal编译器)已有一周了,并且遇到了一个看似简单的练习。给定如下所示的结构,找到最大加权分支:

    1
   4 9
  7 0 2
 4 8 6 3

分支是从顶部开始的任何数字序列(在本例中为1),此时分支对于每个数字都可以从左向下或从右向下扩展。例如,分支1-4-0可以扩展为1-4-0-8或1-4-0-6。所有分支必须从顶部开始,在底部结束。

在此示例中,最大分支是1-4-7-8,这给了我们20。为解决此问题,我尝试使用回溯。三角形结构存储在“三角形”类型的数组中:

type triangle = array[1..MAX_NUM_OF_ROWS, 1..MAX_NUM_OF_ROWS] of integer;

这是我的实现:

function findAux(data: triangle; dim: integer; i: integer; j:integer) : integer;
begin
if i = dim then
    findAux := data[i][j]
else
    if findAux(data, dim, i + 1, j + 1) > findAux(data, dim, i + 1, j) then
        findAux := data[i+1][j+1] + findAux(data, dim, i + 1, j + 1);
    else
        findAux := data[i+1][j] + findAux(data, dim, i + 1, j);
end;

function find_heaviest_path(data: triangle; dim: integer) : integer;
begin
    find_heaviest_path := findAux(data, dim, 1, 1);
end;

如您所见,我使用了辅助功能。不幸的是,它似乎没有给出正确的结果。对于上面看到的结构,我得到的结果是27,相差7点。我想念什么?整体实施情况如何?我应该补充一点,对于本练习,最大行数为100。如果需要澄清,请不要犹豫。

潜伏者

findAux正在将错误的值添加到递归获得的结果中。顺便说一句,您可以使用一些局部变量来简化代码。的更正版本findAux

uses math;

...

function findAux(data: triangle; dim: integer; i: integer; j:integer) : integer;
var
    left, right: integer;
begin
    if i = dim then
        findAux := data[i][j]
    else begin
        left := findAux(data, dim, i + 1, j);
        right := findAux(data, dim, i + 1, j + 1);
        findAux := data[i][j] + Max(left, right);
    end;
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何修改背包-找到最大的加权和

来自分类Dev

从字典中找到加权最小和最大密钥的Python方法

来自分类Dev

if语句和Pascal中的最大值

来自分类Dev

克隆分支:上游分支中未找到远程分支branch-99

来自分类Dev

给定一个列表和一个限制,使用递归/回溯算法找到最大和

来自分类Dev

配置文件中的“分支中的最大行数”

来自分类Dev

如何找到数组中除数最大的数字?

来自分类Dev

如何找到树中节点的最大总和

来自分类Dev

如何找到数组中的最大值?

来自分类Dev

在Python中伪造回溯

来自分类Dev

在Haskell中执行回溯

来自分类Dev

在 main 中防止回溯

来自分类Dev

如何增加ggtree中的最大分支宽度?

来自分类Dev

Python Image - 从图像骨架中寻找最大的分支

来自分类Dev

回溯以找到所有可能的路径

来自分类Dev

如何找到提交的分支?

来自分类Dev

如何找到提交的分支?

来自分类Dev

Python回溯问题,达到最大递归深度

来自分类Dev

布局中的加权视图

来自分类Dev

TensorFlow 中的加权掩码

来自分类Dev

在加权图中找到最短路径

来自分类Dev

在未加权图中找到最长路径

来自分类Dev

使用加权关系找到与节点最近的邻居

来自分类Dev

Inno Setup在Pascal脚本中获取最小和最大整数值

来自分类Dev

当另一个分支合并到一个分支时,如何找到在一个分支中更改的文件(忽略来自合并分支的更改)?

来自分类Dev

优化-最大化最小的加权贡献

来自分类Dev

完整图的最大加权配对算法

来自分类Dev

在Coq分支和回溯方面是否取得了成功?

来自分类Dev

如何找到按每个值的深度加权的整数二叉树中存储的值的总和?

Related 相关文章

热门标签

归档