最短路模版
2014-04-20 13:21
330 查看
SPFA
Dijkstra
bool SPFA() { memset(inq, false, sizeof(inq)); for(int i = 0; i <= n; i++) d[i] = INF; d[0] = 0; queue <int> Q; Q.push(0); inq[0] = true; while(!Q.empty()) { int u = Q.front(); Q.pop(); inq[u] = false; for(int i = 0; i < G[u].size(); i++) { int v = G[u][i].v; int w = G[u][i].w; if(d[v] < d[u] + w) { d[v] = d[u] + w; if(!inq[v]) { inq[v] = true; Q.push(v); } } } } }
Dijkstra
const int INF = 999999999; const int maxn = 510; struct edge { int u, v, w; edge(){} edge(int u, int v, int w) : u(u), v(v), w(w) {} }a[16010]; int n, m, num; struct HeapNode { int u, d; bool operator < (const HeapNode& rhs) const { return d > rhs.d; } HeapNode(){} HeapNode(int u, int d) : u(u), d(d) {} }; vector <edge> edges; vector <int> G[maxn]; int d[maxn]; bool vis[maxn]; void Dijkstra(int s) { for(int i = 0; i <= n; i++) d[i] = INF; d[s] = 0; memset(vis, false, sizeof(vis)); priority_queue <HeapNode> Q; Q.push(HeapNode(s, 0)); while(!Q.empty()) { HeapNode x = Q.top();Q.pop(); int u = x.u; if(vis[u]) continue; vis[u] = true; for(int i = 0; i < G[u].size(); i++) { edge e = edges[G[u][i]]; int v = e.v; if(d[v] > max(x.d, e.w)) { d[v] = max(x.d, e.w); Q.push(HeapNode(v, d[v])); } } } } void AddEdge(int u, int v, int w) { edges.push_back(edge(u, v, w)); edges.push_back(edge(v, u, w)); num = edges.size(); G[u].push_back(num-2); G[v].push_back(num-1); }
相关文章推荐
- 最短路,模版
- ZOJ 3166 Lazy Tourist 最短路floyd模版题
- poj 3463 (次短路的模版)
- 最短路模版(floyed/dijkstra/bellman-ford/spfa)
- 最短路模版(dijkstra)
- poj 2387 Til the Cows Come Home (最短路,dijkstra模版题)
- POJ 2449 第K短路模版题 A*+最短路
- POJ1511 SPFA模版 用边存的最短路
- HDU2544 最短路(模版题dijkstra/floyd/spfa)
- HDOJ--最短路---Dijkstra模版
- HDU1874畅通工程续(最短路模版)
- HDU_2544——最短路,Dijkstra模版
- 最短路模版--迪杰斯特拉
- 全源最短路模版
- 最短路模版
- ZOJ 3166 Lazy Tourist 最短路floyd模版题
- poj 3268 Silver Cow Party(最短路,正反两次,这个模版好)
- 单源最短路模版
- 最短路模版整理
- HDU2544-最短路(最短路模版题目)