我最近不得不研究Dijkstra算法及其证明。我在所有来源中找到的算法证明都以所有顶点数量和已访问顶点数量相等(例如R=V或S=V)结束。此外,该算法的while循环在Q(初始化为图的所有顶点)为空时终止,因此必须访问所有顶点。我不明白为什么一定要这样。难道没有图形,算法不必访问所有顶点,例如:起始顶点直接连接到“查找”顶点,权重为1,并连接到其他顶点,权重为10。我希望你能理解我的问题。编辑:这是我从Cormen使用的伪代码。
Dijkstra算法通常用来计算从起始节点到所有相连节点的最短距离。即使在这种形式下,它也不会访问所有节点:只需检查一个连通分量的顶点即可。 对于两个节点之间的最短路径,有一种更有效的版本,可以在找到比迄今为止发现的最短路径更长的所有可能路径后停止搜索。该版本不总是访问连接子图的所有节点。