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;       }

原创粉丝点击