【问题标题】:How to find the shortest path in a n-ary tree with duplicate node values?如何在具有重复节点值的 n 叉树中找到最短路径?
【发布时间】:2019-06-27 02:22:02
【问题描述】:

这是一个例子:

     0
     1 
   2   3 
          2

我正在寻找 2 和 3 之间的最短路径,即等于 1。

【问题讨论】:

  • 1.哪个“2”? ;) 2.请解释你的“路径定义”更详细一些。 (长度或元素 = 1?) 3. 但本能地我会“冒泡”:(为什么不)尝试 BFS 或 DFS? :)
  • 将 n 元树视为无向图,您可以从值为 2(在您的示例中)的每个节点运行 BFS,然后检查其与 3 的距离并选择最小值
  • 是 [2, 1, 3] 有效路径还是不允许从孩子回到父母

标签: algorithm tree shortest-path


【解决方案1】:

首先创建指向每个出现的 2 和 3 的指针集,并为每个指针保留一个整数,显示它到目前为止移动的总距离。在树的每个节点上留出空间,说明是否已被每种类型的指针看到,如果是,则该指针当时累积的距离以及指针的来源。

重复地将每个指针向上移动一步,增加它的距离。查看它到达的树节点上的注释。如果这是同一类型,并且距离大于指针的距离,则更换注释。如果这是相同类型且距离不大于,则相同类型的两个指针发生碰撞,您可以放下第二个指针。如果它是不同类型的,那么您就有可能的最短路径。

继续前进,直到每个指针都在顶部,或者每个指针都至少行进到找到的最短路径,因为之后找到的任何路径都必须比找到的最短路径长。

在最坏的情况下,我们一直工作到最后,我们遍历整个树,但每种类型只遍历一次,因为一个类型的指针向上移动到已经被另一个相同类型的指针传递的节点会看到一个到它的节点的距离小于它自己的距离并停止。因此,最坏情况的成本与树的大小呈线性关系。

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2016-08-03
    相关资源
    最近更新 更多