我知道算法如果达到负周期并且不会终止 如果路径包含距离大于0的循环,则路径不会是最短路径。
我的问题是如果存在距离为0的最短路径会发生什么,算法会将该周期包含在最短路径中吗?
你会说所有最短的路径都是非循环的吗?
答案 0 :(得分:0)
使用Dijkstra算法,只要没有负路径,所有路径都保证是非循环的。一旦找到路径,Dijkstra就会向节点添加路径,并且只有在找到新的更便宜的路径时才更新该路径。从0 <0 0为假,算法不会考虑该路径,因此将忽略0个边沿周期。
这并不意味着最短路径不能循环。 (如果存在负边沿周期,则可以进入无限循环,或者如果存在零边循环,则采用它5次的路径与采用它一次的路径一样有效。)这只是Dijkstra优化忽略任何需要额外无意义计算的东西,所以Dijkstra永远不会产生一个循环的路径。这里的关键点仅仅是因为没有返回循环,并不意味着它们不存在。