bellman-ford最短路径算法
bellman-ford 算法,是求单源点最短路径的算法。
我们设从起点到其他点i的最短路为d[i],
显然满足下列等式
d [ i ] = m i n { d [ j ] + c o s t ( j , i ) ∣ e = ( j , i ) ∈ E } d[i]=min \{ d[j]+cost(j,i) | e=(j,i) \in E \} d[i]=min{
d[j]+cost(j,i)∣e=(j,i)∈E}
含义是到一点的最短路肯定是,到与他相邻的点的最短路加上边的权值,最小的那条。
经过多次迭代上式就可以得到最短路径。
如果图中不存在负圈,那么在最短路径中一个顶点不可能经过2次。也就是说最多|V|-1条边。最多迭代|V|-1次,每迭代一次似乎在多加1条边的路径一起比较。
该算法也可以判断有无负圈,如果迭代超过|V|-1次,有负圈。
图表示方法
之前提到过邻接矩阵
现在介绍另一种边集表示法
用边集合来表示图
struct edge{
int from;
int to;
int cost;
}
struct edge es[MAX_E