poj1860_bellman ford
来源:互联网 发布:理性主义 知乎 编辑:程序博客网 时间:2024/06/05 14:41
题目描述:
解题思路:
首先是带负权值边的图,对于这样的图,如果存在负权回路是没法用djs等求最短路径的,因为每次更新不能确定的最短路径的点(可能由其他大权值的边+一条负权值的边重新更新得到更小)。
那么,对于包含复权回路的图,如何判断一个图是否存在负权回路能否计算出最短路径呢?bellman-ford就是解决介个问题滴。
判断方式就是:
我们知道如果这个图不存在负权回路的话,每做一次全部边的松弛操作(松弛操作就是判断 src->j的长度是否大于src->i+i->j的长度),是可以确定至少一个点的(因为只要没负权回路,就是指存在最短路径的说法,那么因为存在一个原始的出发点作为当前最短,肯定松弛过后肯定能有个点也达到了自己的最短情况)。
也就是说,如果做了n-1次的全部边松弛操作之后,就确定了所有点的最短路径值。如果做第n次全部边松弛操作的时候,还有点的最短值会被更新,则说明图里是存在负权回路的。
因此bellman ford算法是做n次边松弛操作,每次边松弛判断的是m条边。因此算法复杂度为O(nm)。
代码:
#include
#include
#define E 10001
#define N 101
typedef struct{
}EDGE;
int n,m,s;
double v, D[N];
EDGE edges[E];
main(){
}
- poj1860_bellman ford
- poj_2240_bellman ford
- sara Ford
- Ford-Fulkerson
- Bellman-Ford
- bellman-ford
- Ford-furkson
- Bellman-Ford
- poj_3259_bellman-ford
- Ford-Fulkerson
- HDU2544Bellman-Ford
- Bellman-Ford
- Bellman-Ford
- Bellman-Ford
- bellman-ford
- bellman-ford
- bellman-ford
- Bellman-Ford
- poj3468_线段树
- 【转】在word中使用Endnote
- 2012年9月22日
- poj_2777_线段树
- 关于二维码
- poj1860_bellman ford
- poj3461_kmp
- VS中启动多个project
- poj1068_模拟
- 2012年10月25日
- poj1159_dp
- 基本装系统的方法
- 如何提高C++的效率
- Ubuntu中apache的安装和配置