在java中制作深度优先搜索算法

时间:2012-10-12 19:56:22

标签: java depth-first-search

我有以下有向图实现

 Nodes nod[]
 List<Arcs> arc[]

因此,第n个位置上的节点将其列表的所有弧都放在位置n中。当然,节点是相应组织的,因此我可以使用二进制搜索。 基于此实现。我想创建一个DFS算法。我非常清楚伪代码,适应java应该不是问题。

但我的问题如下。在DFS中,我们需要从“顶部”节点开始搜索。考虑一下,我没有这个“顶级”节点。而且,我不知道如何得到它。 所以我问,考虑到我的实现,我如何获得这个顶级节点?

感谢您的帮助。

2 个答案:

答案 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根的节点。