spfa算法核心代码

作者在 2008-09-02 22:53:37 发布以下内容

void spfa()
{
int index,i;
while(!Q.empty())
{
index=Q.front();
Q.pop();
for(i=0;i<edge[index].size();i++)
{
if(dist[edge[index][i].id]<dist[index]+edge[index][i].fa)
{ dist[edge[index][i].id]=dist[index]+edge[index][i].fa;
//if(index!=mm)
//mark[index]=0;
flag[edge[index][i].id]++;
if(flag[edge[index][i].id]>vv)
return ;
if(!mark[edge[index][i].id])
{
Q.push(edge[index][i].id);
mark[edge[index][i].id]=true;
}
}
}
mark[index]=0;
}
return ;
}

mark标记节点是否在队列里。

edge[i][j]以i节点为起点的第j条边

dist[i]从源点到第i个节点的路径长

flag[i]第i个节点进行了多少次松弛操作。

vv路径最大值


 

数据结构 | 阅读 7680 次
文章评论,共2条
vfdff
2008-09-03 00:45
1
spfa算法 什么用 ??
keloy(作者)
2008-09-03 16:11
2
存在负权值的最短路的队列优化算法
游客请输入验证码
浏览255953次