答案 0 :(得分:1)
这个问题在这里已经得到很好的回答。 https://stackoverflow.com/a/13159425/12449779
总而言之,Dijkstra的算法在每次迭代中都将顶点标记为与“标记的”顶点相距最小距离。最初,源顶点是唯一的距离为0的标记顶点。假设存在两个标记顶点A和B,它们与源之间的距离有限,并且它们的路径不重叠。当前,到A和B的路径将被视为从A到B的最短路径。由于路径不重叠,因此从Source到A到B的任何路径的长度应为source到A的长度+从A到B的路径的长度B大于从源到B的路径,因为从源到A和B的路径不重叠。但是,如果允许负负边缘,则不成立。由于从A到B的路径长度可能为负。因此, Dijkstra的算法不起作用。没有简单的方法将具有负边缘的一般图形转换为具有非负边缘的普通图形。 Bellman Ford适用于任何不包含负加权循环的图形。