首页 > 代码库 > Bellman算法

Bellman算法

#include<stdio.h>#include<iostream>#define maxn 1000#define inf 0x3fffffffusing namespace std;struct Edage{    int from;    int to;    int cost;}es[maxn];int d[maxn];int v,e;//无负圈,求单源最短路/*单源最短路:从一个点s到其他点的最短距离*/void shortest_path(int s){    for(int i=0;i<v;i++) d[i]=inf;    d[s]=0;    bool update=false;    while(true)    {        update=false;        for(int i=0;i<e;i++)        {            Edage edage=es[i];            if(d[edage.from]!=inf&&d[edage.from]+cost<d[edage.to])            {                d[edage.to]=d[edage.from]+cost;                update=true;            }        }        if(!update) break;    }}//判断是否有负圈bool find_negative_loop(){    memset(d,0,sizeof(d));    for(int i=0;i<v;i++)    {        for(int j=0;j<e;j++)        {            Edage edage=es[j];            if(d[edage.from]!=inf&&d[edage.from]+edage.cost<d[edage.to])            {                d[edage.to]=d[edage.from]+edage.cost;                if(i==v-1) return true;            }        }            }    return false;}

 

Bellman算法