spfa 快速最短路-队列优化
2017-05-20 13:34
459 查看
spfa 快速最短路-队列优化,可以用
hdu2544 验证算法的正确性
里面的spfa算法摘自acdart 的板子。把这个函数记录在网上,以免忘记。我再理解下。
spfa就是维护一个队列,这个队列中的点可以进行松弛操作。2017-8-25再次修改
hdu2544 验证算法的正确性
里面的spfa算法摘自acdart 的板子。把这个函数记录在网上,以免忘记。我再理解下。
spfa就是维护一个队列,这个队列中的点可以进行松弛操作。2017-8-25再次修改
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <algorithm> #include <queue> #include <cstring> using namespace std; const int maxn = 1e4 + 7; struct Edge { int to; int val; int Next; }edge[maxn]; //只有这个数组范围与边有关 int head[maxn];//数组范围与点数有关 bool vis[maxn]; int dis[maxn]; //int cnt[maxn]; int n, m, tot; void init() { tot = 0; memset(head, -1, sizeof(int) * maxn); } void add(int u, int v, int w) { edge[tot].to = v; edge[tot].val = w; edge[tot].Next = head[u]; head[u] = tot++; } bool spfa(int s) { queue<int> que; memset(dis, 0x7f, sizeof(int) * maxn); memset(vis, 0, sizeof(bool) * maxn); //memset(cnt, 0, sizeof(int) * maxn); vis[s] = true; dis[s] = 0; //cnt[s] = 1; que.push(s); while (!que.empty()) { int u = que.front(); que.pop(); vis[u] = false; for (int i = head[u]; ~i; i = edge[i].Next) { int v = edge[i].to; if (dis[v] > dis[u] + edge[i].val) { dis[v] = dis[u] + edge[i].val; //pre[v] = u;//记录路径 if (!vis[v]) { //是否存在负环 /*if (++cnt[v] > n) { return false; }*/ vis[v] = true; que.push(v); } } } } return true; } int main() { int m; while (~scanf("%d%d", &n, &m)) { if (!(n | m)) { break; } init(); for (int i = 1; i <= m; ++i) { int u, v, w; scanf("%d%d%d", &u, &v, &w); add(u, v, w); add(v, u, w); } spfa(1); printf("%d\n", dis ); } return 0; }
相关文章推荐
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- 蓝桥杯 算法训练 最短路 【SPFA队列优化 + dijkstra优先队列优化】
- Bellman Ford+SPFA队列优化(路径还原 输出最短路的路径)
- 最短路--spfa+队列优化模板
- 【原创】最短路模板 Floyd,优先队列优化dijkstra,SPFA
- uva 10986 (队列优化的spfa最短路)
- HDU 1535 Invitation Cards (最短路,附SLF优化SPFA)
- Bellman-Ford算法及其队列优化(SPFA)
- hdu 2544 【总结】 Dijkstra,Bellman-Ford ,SPFA 最短路求法及对应优化
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
- (双端队列优化的SPFA) bzoj 2100
- HNU 12847 Dwarf Tower(最短路+队列优化)
- 最短路 SPFA (对于bellman-ford 的优化)
- hdu1548A strange lift——最短路(迪杰斯特拉,spfa)。bfs(队列。数组)
- hdu 2066最短路 dijkstra 及其优先队列优化
- 最短路--dijkstra+优先队列优化模板
- 最短路模板[spfa][dijkstra+堆优化][floyd]
- Bellman-Ford算法及其队列优化(SPFA)
- 【NOIP2013】华容道 最短路优化搜索(spfa)
- spfa经过deque(双向队列)优化后的模板