您的位置:首页 > 其它

模板_Bellman-frod算法(最短路径解决负权路问题)

2017-04-19 20:31 417 查看
//Bellman-ford算法核心语句dis[]都是记录源点到各个顶点的最小距离
for(k = 1;k <= n-1;k ++)
for(i = 1;i <= m;i ++)
if(dis[v[i]] > dis[u[i]] + w[i])
dis[v[i]] = dis[u[i]] + w[i];

//初始化dis数组,(1号顶点到个各个顶点的初始距离)
for(i = 1;i <=n;i ++)
dis[i]=inf;
dis[1]=0;

for(k=1;k<=n-1;k++)
{
for(i=1;i<=n;i++)
bak[i]=dis[i];//(拷贝dis[i])

for(i=1;i<=m;i++)
if(dis[v[i]] > dis[u[i]] + w[i])
dis[v[i]] = dis[u[i]] + w[i];
check=0;
for(i=1;i<=n;i++)
if(bak[i]!=dis[i])
{
check=1;
break;
}
if(check=0)
break;//如果dis没有更新就直接退出循环
}
//检测负权回路
flag=0;
for(i=1;i<=m;i++)
if(dis[v[i]] > dis[u[i]] + w[i])
flag=1;
if(flag==1)
printf("有负权路") ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: