奥行きの検索が欲しいものです。
function ExamineField(Field F)
{
if (F.already_in_list)
return
foreach C child of F
{
call ExamineField(C)
}
AddToList(F)
}
は、それからちょうど順番に各フィールドにExamineField()を呼び出し、およびリストは、あなたの仕様に応じて最適な順序で読み込まれます。
フィールドがサイクリック(つまり、A = B + C、B = A + Dなど)である場合、アルゴリズムは無限ループにならないように変更する必要があります。
ご例えば、呼び出しが行くだろう:
ExamineField(A)
ExamineField(B)
ExamineField(C)
AddToList(C)
ExamineField(E)
AddToList(E)
AddToList(B)
ExamineField(D)
ExamineField(B)
(already in list, nothing happens)
ExamineField(C)
(already in list, nothing happens)
AddToList(D)
AddToList(A)
ExamineField(B)
(already in list, nothing happens)
ExamineField(C)
(already in list, nothing happens)
ExamineField(D)
(already in list, nothing happens)
ExamineField(E)
(already in list, nothing happens)
を、リストがC、E、B、D、A.
出典
2009-07-28 06:31:47
caf
を終わるだろうおかげで非常に多く、これはまさに私の用語であります後であった。 – Coxy