📅  最后修改于: 2023-12-03 14:59:30.959000             🧑  作者: Mango
Bellman-Ford算法是一种单源最短路径算法,可求解带有负权边的图的最短路径。该算法以图中的所有边作为起点,重复“松弛”所有边的操作,直到没有任何边可以被松弛为止。该算法的时间复杂度为O(V*E),其中V是图中所有顶点的数量,E是图中所有边的数量。
//初始化距离数组
for(int i=0;i<V;i++){
distance[i] = INT_MAX;
}
distance[source] = 0;
//重复松弛操作直到不再有可更新的边
for(int i=0;i<V-1;i++){ //最多需要V-1轮松弛操作
for(int j=0;j<E;j++){ //遍历所有边
if(distance[edges[j].src] != INT_MAX && distance[edges[j].src] + edges[j].weight < distance[edges[j].dest]){
distance[edges[j].dest] = distance[edges[j].src] + edges[j].weight; //更新距离数组
}
}
}
Bellman-Ford算法适用于带有负权边的图,但不能处理带有负环的图。当图中存在负环时,算法会进入无限循环。同时,该算法的时间复杂度较高,对于大型图效率不高,应考虑其他算法。