本文主要是介绍贝尔曼最短路径算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
时间复杂度为O(n*n) 比Dijkstra算法慢,但是能够检查负圈
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <cmath>
#include <fstream>
const int MAX = 1e5+10;
const int INF = 1e6;using namespace std;struct edge_ {int from, to, cost;
};edge_ es[MAX];
int d[MAX];
int V,E;void Sp(int s){//初始化 fill(d, d+V, INF);d[s] = 0;//循环 while(true){bool update = false;//遍历每条边 for(int i=0; i<2*E; i++){edge_ e = es[i];// d[e.from]已经更新过,d[e.to]没有更新过或者不是最短路径 if(d[e.from]!=INF && d[e.to]>d[e.from]+e.cost){d[e.to] = d[e.from] + e.cost;update = true;}}//如果本次遍历没有更新 也就是说全部都是最短路径 跳出 if(!update) break;}
}//测试函数
int main(){ifstream cin ("D:\\钢铁程序员\\程序数据\\003最短路径.txt");//从文件读取数据流,省去手动
这篇关于贝尔曼最短路径算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!