我目前正在修改我的一个考试并且已经遇到了这个问题, “逐步显示使用Dijkstra算法来找到图中从顶点A到另一个顶点的最短路径。在每一步都应清楚地指出已知和前沿集合。” 我理解如何找到最短的路径,但我对边界集是什么? 谢谢!
答案 0 :(得分:1)
制定Dijkstra算法有很多种方法,但大多数版本背后的核心思想是将节点分成三组:
您已经知道从起点开始的最短路径的节点。这只是起始节点的初始值,随着算法运行的时间越来越长而增长。
边境的节点。这些节点与第一组中的节点相邻,您可以猜测到节点的距离,但不一定能确定猜测是否正确。在算法的每个步骤中,您选择边界中成本最低的节点,并将其移动到您知道最短路径的节点组。
未探测的节点。这些都是剩余的节点。
如果使用优先级队列实现Dijkstra算法,那么边界节点通常是优先级队列中的节点。如果你保留一个到节点的候选距离列表,而是在每个点选择最便宜的距离,那么边界由候选距离不是无穷大的所有节点组成。