【发布时间】:2022-01-22 06:39:05
【问题描述】:
我正在尝试在网格上做 Dijkstra 的最短路径。现在我有它的工作,但我确实有些困惑。假设我正在查看网格中的一个单元格,我对其进行评估,然后如果未评估其所有邻居,则将其推入堆中。我遇到的问题是我最终在堆中出现了同一个单元的多个实例,这确实使进程陷入困境。为了解决这个问题,如果单元格已经在堆中,我将其设置为不将其推送到堆中。这是一种正确的方法,还是会导致问题?这是一个未加权的网格。
【问题讨论】:
标签: dijkstra
我正在尝试在网格上做 Dijkstra 的最短路径。现在我有它的工作,但我确实有些困惑。假设我正在查看网格中的一个单元格,我对其进行评估,然后如果未评估其所有邻居,则将其推入堆中。我遇到的问题是我最终在堆中出现了同一个单元的多个实例,这确实使进程陷入困境。为了解决这个问题,如果单元格已经在堆中,我将其设置为不将其推送到堆中。这是一种正确的方法,还是会导致问题?这是一个未加权的网格。
【问题讨论】:
标签: dijkstra
如果是dijkstra,你没有堆,你有一个优先队列。 而且您必须存储到达节点的最短距离。因此,如果您再次到达,但距离较远,您基本上会忽略到达。如果距离较短,您必须相应地更新队列中节点的优先级,而不是插入两次(如果您的队列的实现不支持优先级更改,那么您只需删除节点并以新的优先级重新插入)
【讨论】: