我有以下有向图实现
Nodes nod[]
List<Arcs> arc[]
因此,第n个位置上的节点将其列表的所有弧都放在位置n中。当然,节点是相应组织的,因此我可以使用二进制搜索。 基于此实现。我想创建一个DFS算法。我非常清楚伪代码,适应java应该不是问题。
但我的问题如下。在DFS中,我们需要从“顶部”节点开始搜索。考虑一下,我没有这个“顶级”节点。而且,我不知道如何得到它。 所以我问,考虑到我的实现,我如何获得这个顶级节点?
感谢您的帮助。
答案 0 :(得分:2)
扩展我的评论:
假设弧是定向的(即,从父节点到子节点),您可以搜索所有节点中没有传入弧的节点:
// parent_count is an integer array of the same size as nod[]
for i = 1..n
for each arc in arc[i] (arc going from i to j)
increment parent_count[j]
end
end
for k = 1..n
if parent_count[k] == 0
return k
end
答案 1 :(得分:0)
DFS / BFS是通过图表传播的非常常见的通用算法,两者都没有顶级节点的特殊含义,您可以从任何节点启动DFS。例如,DFS用于拓扑排序算法,它表明我们必须从没有传入边的节点开始。
您能否强调一下您想要解决的问题?这应该有助于我们找到必须用作DFS根的节点。