【问题标题】:Dijkstras multiple copies of cells in the heapDijkstras 堆中的多个单元格副本
【发布时间】:2022-01-22 06:39:05
【问题描述】:

我正在尝试在网格上做 Dijkstra 的最短路径。现在我有它的工作,但我确实有些困惑。假设我正在查看网格中的一个单元格,我对其进行评估,然后如果未评估其所有邻居,则将其推入堆中。我遇到的问题是我最终在堆中出现了同一个单元的多个实例,这确实使进程陷入困境。为了解决这个问题,如果单元格已经在堆中,我将其设置为不将其推送到堆中。这是一种正确的方法,还是会导致问题?这是一个未加权的网格。

【问题讨论】:

    标签: dijkstra


    【解决方案1】:

    如果是dijkstra,你没有堆,你有一个优先队列。 而且您必须存储到达节点的最短距离。因此,如果您再次到达,但距离较远,您基本上会忽略到达。如果距离较短,您必须相应地更新队列中节点的优先级,而不是插入两次(如果您的队列的实现不支持优先级更改,那么您只需删除节点并以新的优先级重新插入)

    https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

    【讨论】:

    • 不是用 minHeap 实现了优先级队列吗?
    • Dijkstra 没有规定任何特定的实现。选择你手头的一个。 (很可能已经在您使用的语言的标准库之一中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多