Bellman-Ford求最短路径

来源:互联网 发布:j罗 皇马 数据 编辑:程序博客网 时间:2024/04/30 13:53
#include <iostream>using namespace std;const int maxn=100;const int maxint=99999;typedef struct Edge{    int u,v;    // 起点,重点    int wt;  // 边的权值}Edge;Edge edge[maxn]; // 保存边的值int  dist[maxn]; // 结点到源点最小距离int noden,edgen,se;// 结点数,边数,源点void init(){    scanf("%d%d%d",&noden,&edgen,&se);    for(int i=1;i<=noden;++i)        dist[i]=maxint;    dist[se]=0;    for(int i=1;i<=edgen;++i)    {        scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].wt);        if(edge[i].u==se)//注意这里设置初始情况            dist[edge[i].v]=edge[i].wt;    }}// 松弛操作 void relax(int u,int v,int wt){    if(dist[v]>dist[u]+wt)        dist[v]=dist[u]+wt;}bool Bellman_Ford(){    for(int i=1;i<=noden-1;++i)        for(int j=1;j<=edgen;++j)            relax(edge[j].u,edge[j].v,edge[j].wt);    bool flag=1;    // 判断是否有负环路    for(int i=1;i<=edgen;++i)    {        if(dist[edge[i].v]>dist[edge[i].u]+edge[i].wt)        {            flag=0;            break;        }        return flag;    }}int main(){    //freopen("input.txt", "r", stdin);    init();    if(Bellman_Ford())        for(int i=1;i<=noden;i++)            printf("%d ",dist[i]);    return 0;}
0 0
原创粉丝点击