这几天在看迪杰斯特拉算法(dijkstra算法)的时候,了解到这个算法不能够计算负权重,这让我很纳闷???为什么呢???下面我按照我理解的解释一番,若有错误希望阅读者能够评论指出,不胜感激。
我们看上图,求A到其他节点的最短路径:
首先得出A -> B = 1,A -> C = 0,A -> D = 99,然后将A被标记访问过。
接着找B到其他节点的距离,看看能不能更新上述节点间距离或者找到其他新节点。找到一个B -> C = 1,A -> B + B -> C = 2 > A -> C = 0,所以不予更新A -> C的节点距离,此时将B被标记访问过。
再接着找C到其他节点的距离,发现C那个节点也到不了,也没有发现新节点,此时将C被标记访问过。
再接着重点就来了,D -> B = -300,保证了A -> D + D -> B = -201 < A -> B = 1,则更新A -> B = -201,此时将D被标记访问过。
但是,我们明显可以看出,A -> D + D -> B + B -> C = -200 < A -> C = 0,也就是说
dijkstra算法为什么不能计算负权重?
最新推荐文章于 2025-04-19 09:40:17 发布