Recursion Ada-遍历列表-我应该使用什么方法?
我正在做一个ADA项目。基本上,我创建了一个列表和一个列表列表 假设我有一个类似于a->B->D->E->F的列表,这意味着a塔与B塔、D塔、E塔和F塔相连 现在我还需要一个列表来存储所有的主塔。因此,假设我有A->B->D->E->F,我有C->X->Y->Q和E->P->R,列表列表应该如下所示: A->C->E(基本上是所有主要节点的列表)。 如上所述,我有一个列表及其连接。现在我需要遍历这些列表,看看是否可以建立连接。例如:我有A->B->D->E->F,我有C->X->Y->Q和E->P->R。如果问我A->R,可能的答案应该是真的。因为A->E->R。Recursion Ada-遍历列表-我应该使用什么方法?,recursion,ada,dijkstra,breadth-first-search,Recursion,Ada,Dijkstra,Breadth First Search,我正在做一个ADA项目。基本上,我创建了一个列表和一个列表列表 假设我有一个类似于a->B->D->E->F的列表,这意味着a塔与B塔、D塔、E塔和F塔相连 现在我还需要一个列表来存储所有的主塔。因此,假设我有A->B->D->E->F,我有C->X->Y->Q和E->P->R,列表列表应该如下所示: A->C->E(基本上是所有主要节点的列表)。 如上所述,我有一个列表及其连接。现在我需要遍历这些列表,看看是否可以建立连接。例如:我有A->B->D->E->F,我有C->X->Y->Q和E->
我的疑问是我应该使用什么方法?BFS?递归?什么是最好的?嵌套
for/of
循环?大概是这样的:
Function Exists( Target, Source : Node ) return boolean is
begin
if Target = Source then
return True;
else
for List of Source loop
for Item of List loop
if Item = Target then
return True;
end if;
end loop;
end loop;
end if;
return false;
end Exists;
或者,如果使用容器的向量,则有以下函数:
function Contains
(Container : Vector;
Item : Element_Type) return Boolean;
您可以这样申请:
Package Inner_List is new Ada.Containers.Indefinite_Vectors(
Index_Type => Positive,
Element_Type => Integer
);
Package Outer_List is new Ada.Containers.Indefinite_Vectors(
Index_Type => Positive,
Element_Type => Inner_List.Vector,
"=" => Inner_List."="
);
Function Exists( Item : Integer; List : Outer_List.Vector ) return boolean is
begin
for Items of List loop
if Items.Contains(Item) then
return true;
end if;
end loop;
return false;
End Exists;
看起来很有用。这里的场景是,我使用一个通用列表作为列表。我已经定义了它。这是任务的一部分。所以我有一个列表,包含所有的主塔,每个塔都有自己的连接列表。所以我怀疑如果我打开A->B->C->。。。我到达Bm,然后我需要遍历B的所有连接,以此类推。正确吗?Shark8:虽然这里欢迎家庭作业帮助请求,只要它是预先提出的——就像gkamani2011一样——但一个so答案应该有助于引导提问者找到答案,而不是提供大部分家庭作业解决方案。我只是说,鉴于OP需要使用18年前的Ada方言,我认为这个答案将提供指导而不是解决方案。。。