【问题标题】:Graph pre-order/post-order traversal?图前序/后序遍历?
【发布时间】:2016-03-23 20:29:58
【问题描述】:

这是一个 DFS 前序顶点编号,对应于 DFS 树的前序遍历,第二个是后序编号,对应于 DFS 树的后序遍历。

谁能解释一下我们是如何得到这个排序的,因为我只知道如何在二叉树上应用预购或后购。谢谢

【问题讨论】:

  • 你知道 DFS 是如何工作的吗?如果预购 1.select 具有最小权重的根节点,即您的 eg.. 中的 1.. 然后 2.search 并选择另一个权重小于除父节点之外的所有其他节点的节点,并且它不应形成循环并重复步骤 2,直到覆盖所有顶点
  • DFS 在任何图上的工作方式与(二叉)树类似——主要区别在于算法必须明确防止循环图中的循环(不会出现在树中)。如果节点值遵循一些定义的规则,这可以隐式处理。

标签: java data-structures traversal depth-first-search


【解决方案1】:

试着用你的例子一步一步地遵循这个伪代码,你就会理解这个算法,它非常简单,只是简单的 DFS:

Initialize clock to 1

PreVisit(v):
    pre[v] <- clock
    clock <- clock + 1

PostVisit(v):
    post[v] <- clock
    clock <- clock + 1

Explore(v):
    visited[v] = true
    PreVisit(v)
    for all u adj to v:
        if u is not visited:
            Explore(u)
    PostVisit(v)

请注意,您必须创建一个包含顶点长度的prepostvisited 数组。对于visited 数组,您必须在调用Explore(v) 之前用false 填充它。

【讨论】:

  • 您还应该为访问前和访问后的数字定义不同的时钟
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
相关资源
最近更新 更多