【问题标题】:Making a Depth first-search algorithm in java在java中制作深度优先搜索算法
【发布时间】:2012-10-13 04:23:38
【问题描述】:

我有以下有向图实现

 Nodes nod[]
 List<Arcs> arc[]

因此,第 n 个位置的节点在位置 n 处具有列表的所有弧。当然,节点是相应组织的,因此我可以使用 Binary Search。 基于此实现。我希望创建一个 DFS 算法。伪代码我很了解,适应java应该不是问题。

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

感谢您的帮助。

【问题讨论】:

  • 那么数组中的所有节点都被认为是顶级节点吗?
  • @Brad 没有。那就是问题所在。它是一个正常的图表。我需要找到顶部节点
  • @RahulTripathi 没有真正回答我的问题。
  • 假设根节点不在已知位置(第一,中间,无论如何)我想你必须寻找没有弧线的节点 to 它。

标签: java depth-first-search


【解决方案1】:

扩展我的评论:

假设弧是定向的(即仅从父节点到子节点),您可以在所有节点中搜索没有传入弧的节点:

// 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

【讨论】:

    【解决方案2】:

    DFS/BFS 是非常常见的遍历图的通用算法,两者都没有顶部节点的特殊含义,您可以从任何节点启动 DFS。例如,DFS 用于拓扑排序算法,它指出我们必须从没有传入边的节点开始。

    能否请您强调一下您要解决的问题?这应该有助于我们找到必须用作 DFS 根的节点。

    【讨论】:

    • 是的,你是对的。您可以选择任何节点,DFS 将进行搜索。但在这种特殊情况下,出于特定原因,我想从顶部节点开始搜索。我仍然得到了如何找到顶部节点的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多