代码:
#include<bits/stdc++.h>
using namespace std;
#define MAX INT_MAX
typedef int CostType;
struct Edge{
int v;
int u;
CostType cost;
Edge(){}
Edge(int x,int y,int c):v(x),u(y),cost(c){}
};
int bellman_flod(Edge* E,int vn,int em,int start,int end){
/*求一个图中start到end的最短路径。
允许纯在负边,但不能有负回路。
有vn个点,编号从0开始。
em条边。边集为E。
*/
int mine[vn];
memset(mine,MAX,vn);
mine[start]=0;
bool is=false;
for(int i=0;i<=vn;i++){
bool flog=false;
for(int i=0;i<em;i++){
if(mine[E[i].u]!=MAX&&mine[E[i].v]>mine[E[i].u]+E[i].cost){
flog=true;
mine[E[i].v]=mine[E[i].u]+E[i].cost;
}
}
if(!flog){
is=true;
break;
}
}
if(is) return mine[end];
else return MAX;
}