2010-11-23 8 views
2

私のDelphi 2007データベースアプリケーションでは、世代のリストがあります。各Generationにはプライシングテンプレートのリストがあり、それぞれが一連の値です。このアプリケーションでは、ユーザは広告申込情報を作成し、任意の世代の価格設定テンプレートを割り当てることができます。新しい世代は、既存の世代を複製することによって作成されます。したがって、ユーザーは最初の世代を作成し、それを複製して、新しい世代の必要な価格テンプレートの値を変更するだけで済みます。これらの世代(および価格設定テンプレート)はoriginids.ieによって接続され、Generation1のoriginidは0になり、generation2はgeneration1のidなどを指すoriginidを持ちます。また、既存のものから新しい世代を作成できます。世代3起源は世代1である。今、ユーザは、リフレッシュ機能を望んでおり、ユーザが価格設定テンプレートを世代から他の世代に「接続」されている場合に更新することができる。すなわち、それらが起点IDによって接続されている場合(必ずしも直接接続によるものではなく、起源生成の起点IDがターゲットのIDまたはターゲットの直接の子またはターゲットの子の子のいずれかを直接指している場合) 。等)。以下の説明をご覧ください。子孫のアンダーリストリストを検索する

この場合、ソースからターゲットのアルゴリズム(アルゴリズム/データ構造)を検索する最良の方法はありますか?


プラディープ


はGenerationName --id

、事前にあなたのすべてをありがとう - 100-- 0
ジェネレーション2 --101 --100( -

ジェネレーション1をOriginIDクローン化1)
世代3 - 102 - 100(1からクローニング)
世代4 - 103 - 102(3からクローニング)
世代5 - 104 - (第1世代→第3世代)または第4世代(世代1→世代3→世代4)または世代5(世代1→世代3→世代4→世代1→世代3→世代4)第2世代→第5世代)が接続されているためです。しかし第3世代から第5世代へのリンクは存在しないため、第3世代から第5世代までは許されません。

答えて

0

世代を別の世代にアップグレードできるかどうかを判断するには、このような機能を使用します。ここで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; 
1

私の意見では、tree data structureを使用すると、この種の問題の最も良い方法です。

Delphi IDEには、この目的でTTreeViewコンポーネントを使用できます。

TTreeViewコンポーネントを使用してツリー構造にデータを入れます。 TTreeViewに関するチュートリアルのためのClick here

TTreeViewで検索する場合は、this linkに行きます。

関連する問題