您的位置:首页 > 其它

最短路径问题的Dijkstra和SPFA算法总结

2014-03-26 14:25 239 查看
Dijkstra算法:

解决带非负权重图的单元最短路径问题。时间复杂度为O(V*V+E)

算法精髓:维持一组节点集合S,从源节点到该集合中的点的最短路径已被找到,算法重复从剩余的节点集V-S中选择最短路径估计最小的节点u,对u的所有连边进行松弛操作。即对j=1~n,dis[j] = min(dis[j],dis[k]+map[k][j])。

常规代码如下:

//边用vector<pait<int,int> > 存储
void SPFA(int s)
{
int u,v,i;
int len;
for(i=0;i<=n;i++)
{
inq[i] = 0;
dis[i] = Mod;
}
dis[s] = 0;
while(!que.empty())
que.pop();
que.push(s);
while(!que.empty())
{
u = que.front();
que.pop();
inq[u] = 0;
for(i=0;i<edge[u].size();i++)
{
v = edge[u][i].first;
len = edge[u][i].second;
if(dis[v] > len + dis[u])
{
dis[v] = len + dis[u];
if(!inq[v])
{
inq[v] = 1;
que.push(v);
}
}
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: