最短路径问题的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])。
常规代码如下:
View Code
解决带非负权重图的单元最短路径问题。时间复杂度为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
相关文章推荐
- 最短路径问题的Dijkstra和SPFA算法总结
- 【最短路径问题】dijkstra 迪杰斯特拉
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
- HDU-3790 最短路径问题(Dijkstra)
- hdu3790 最短路径问题 (Dijkstra & SPFA)
- 最短路径算法 dijkstra + floyd + spfa 【记录 总结】
- hdu3790 最短路径问题 (dijkstra,双关键值最短路)
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- 最短路径算法总结(Floyd,bellmen-ford,dijkstra,Spfa)
- poj1847 - Tram (最短路径问题) (Dijkstra)
- hdu3790最短路径问题Dijkstra(迪杰斯特拉)
- HDOJ 3790 最短路径问题 (最短路 && Dijkstra && 双权值)
- hdu-3790-最短路径问题(Dijkstra)
- hud 3790 最短路径问题【Dijkstra简单应用】
- 单源最短路径问题[Dijkstra实现]
- HDU3790 最短路径问题(Dijkstra)(上手&&模板:伴随状态)
- 数据结构 学习笔记(八):图(中):最短路径问题(单源最短路径 Dijkstra,多源最短路径 Floyd)
- 单源最短路径问题[Dijkstra实现]
- hdu3790 最短路径问题(Dijkstra)
- 最短路径算法总结(Floyd,bellmen-ford,dijkstra,Spfa)