基本概述:
求含有负权值的单源最短路算法,但是它的效率比较低,时间复杂度比较高,代码比较好理解。
主要的模板代码部分:
typedef struct Edge
{
int u,v;//存各个点
int cost;//放边的权值
}
int Bellman_Ford()
{
for(int i=1;i<=nodenum;i++)
dis[i]=INF;//把距离初始化为最大值
dis[1]=0;
for(int i=1;i<=nodenum;i++)
{
for(int j=1;j<=edgenum;j++)
{
if(dis[edge[j].v]>dis[edge[j].u+edge[j].value)
{
dis[edge[j].v]=dis[edge[j].u+edge[j].value;
}
}
}
bool flag=1;
for(int i=1;i<=edgenum;i++)
{
if(dis[edge[i].v]>dis[edge[i].u]+edge[i].value)//判断是否有负回路
{
flag=0;
break;
}
return flag;
}
}