data-structures - 搜索后代的无序列表

标签 data-structures delphi

在我的Delphi 2007数据库应用程序中,有一个“世代”列表。每个世代都有一个定价模板列表,每个定价模板都是一组值。在应用程序中,用户可以创建订单项并分配任何世代的定价模板。通过克隆现有的一代来创建新一代。因此,用户只需创建第一代,然后对其进行克隆,并仅更改新一代中所需的定价模板值即可。这些世代(和定价模板)由originids连接。即,Generation1的originid为零,Generation2的originid指向generation1的id等。此外,用户可以从任何现有的generation中创建一个新一代。起源可以是generation1。现在,用户需要一种刷新功能,在该功能下,用户可以将价格模板从一个世代更新为任何其他世代(如果它们已“连接”)。也就是说,如果它们通过起源ID连接(不一定通过直接连接)。即,如果源代的起源ID直接指向目标的ID或目标的任何直接子代,或目标的子代的任何子代。 。等等)。请参阅以下说明。

在这种情况下,从源搜索目标(算法/数据结构)的最佳方法是什么?

谢谢大家,
普拉迪普



GenerationName --Id-OriginID

第1代-100-0
第2代--101 --100(从1克隆)
第三代--102 --100(从1克隆)
第4代--103 --102(从3克隆)
第5代--104 --101(从2克隆)

在这里,用户可以从第1代更新到第3代(第1代→第3代)或第4代(第1代→第3代→第4代)或第5代((第1代→第2代→第5代)。但是第3代到第5代是不允许的,因为它们之间没有链接。

最佳答案

为了确定一个世代是否可以升级到另一个世代,我将使用与此类似的功能。 gen在这里是一个结构,您可以在其中加载世代并可以通过ID查找它们。

function canUpgrade(fromId, toId: integer) : boolean;
var
  id : integer;
begin
  Result := false;
  id := toId;
  while id<>0 do
  begin
    if gen[id].originId=fromId then
    begin
      Result := true;
      Break;
    end
    else
    begin
      id := gen[id].originId;
    end;
  end;
end;

关于data-structures - 搜索后代的无序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254913/

相关文章:

algorithm - 与后缀树的隐式表示匹配的字符串

c - 我是否在 updateDate 函数中正确使用了指针?

java - 仅包含最新条目的 HashMap

c++ - 多重搜索组合的数据结构设计

java - 查找与 DLL 中的偏移量匹配的 Delphi 源代码行

delphi - 有没有办法避免RTL?

delphi - 通过Delphi Olevariant类型获取COM对象的成员

javascript - 如何将对象的对象转换为单独的值?

multithreading - Delphi - 将线程与框架同步

delphi - 为什么断点去掉后没有消失