Bellman_Ford算法求最短路径
来源:互联网 发布:ubuntu gcc 安装包 编辑:程序博客网 时间:2024/05/01 16:42
/*bellman_ford算法*/#include <iostream>#include <fstream>using namespace std;#define SIZE 100#define INL 1000000int graph[SIZE][SIZE];int n;int t[SIZE];int d[SIZE];fstream fin;bool bellman_ford(int s);int main(){ fin.open("1004.txt",ios::in); int m; fin>>n>>m; int i,j; //邻接数据 for(i=0;i<n;i++) for(j=0;j<n;j++) graph[i][j]=INL; for(i=0;i<m;i++) { int x,y; fin>>x>>y; fin>>graph[x][y]; } if(!bellman_ford(0)) cout<<"can't find the best way!"<<endl; else { bellman_ford(0); for(int i=0;i<n;i++) cout<<d[i]<<" "; cout<<endl; } system("pause"); return 0;} bool bellman_ford(int s){ //初始化程序 for(int i=0;i<n;i++) { d[i]=INL; t[i]=-1; } d[s]=0; for(int i=0;i<n-1;i++) { for(int j=0;j<n;j++) for(int k=0;k<n;k++) { if(graph[j][k]<INL) { if(d[k]>d[j]+graph[j][k]) { d[k]=d[j]+graph[j][k]; t[k]=j; } } } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(graph[i][j]<INL) { d[j]>d[i]+graph[i][j]; return false; } } return true; }