问一下为什么dijkstra算法不能处理负权边.最好举例说明啊,越仔细越好...

问题描述:

问一下为什么dijkstra算法不能处理负权边.最好举例说明啊,越仔细越好...
1个回答 分类:数学 2014-10-16

问题解答:

我来补答
会形成环,使得路越走越短,到不了终点.
再问: 不是应该每遍历一个点后就放进一个集合,这样最后另外一个集合中不会再有结点了,怎么会死循环....
再答: 你试试用dijkstra求这个路...因为dijkstra算法所需要的是当前最短路径,也就是说,它所求的必定是最短的,当每条边都是正数时,它可以保证,以后每条边,因为是加法,所以肯定比当前边的值要大,但有负数就不一定了..... 上面那几个数分别是7,5,-5...看的清吗?
再问: 会出现错误答案我知道,但是有人说回出现死循环,我觉得不会啊,1->2 1, 2->1 -5, 2->3 7; 有人说上面那个例子是死循环,可我觉得不会出现这个...
再答: 不会出现啊.....因为被标记了....我记错了... 如果用Bellman_ford会有负权值回路...... dijkstra 不能处理负权边,是因为它无法保证当前所选的边一定是最短边,比如说上面的例子,如果把-5改成5的话,它就可以保证5一定为最短边,因为后面的运算为加法,而如果有负权边的话,后面就变成减了,它就无法保证了....
 
 
展开全文阅读
剩余:2000