单源最短路 Dijkstra O(mlogn) (类实现)
2008-02-18 01:46
260 查看
转载自 Felicia 的bolg
单源最短路 Dijkstra O(mlogn) (类实现)
单源最短路 Dijkstra O(mlogn) (类实现)
#include <iostream>
#include <vector>
#include <map>
#define maxn 1010
using namespace std;
typedef double weight;
class graph_c
void graph_c::init(int _n)
void graph_c::add_edge(int u, int v, weight w)
void graph_c::dijkstra(int S)
weight d, tmp;
int v;
multimap<weight, int>::iterator it;
h.clear();
for (int i = 0; i < n; i++) dist[i] = -1;
dist[S] = 0;
pa[S] = -1;
h.insert(multimap<weight, int>::value_type(0, S));
while (!h.empty())
it = h.begin();
v = it->second;
d = it->first;
h.erase(it);
for (int i = 0; i < r[v].size(); i++)
tmp = d + e[v][i];
int j = r[v][i];
if (dist[j] < 0 || tmp < dist[j])
dist[j] = tmp;
pa[j] = v;
h.insert(multimap<weight, int>::value_type(tmp, j));
}
}
}
}
单源最短路 Dijkstra O(mlogn) (类实现)
单源最短路 Dijkstra O(mlogn) (类实现)
#include <iostream>
#include <vector>
#include <map>
#define maxn 1010
using namespace std;
typedef double weight;
class graph_c
void graph_c::init(int _n)
void graph_c::add_edge(int u, int v, weight w)
void graph_c::dijkstra(int S)
weight d, tmp;
int v;
multimap<weight, int>::iterator it;
h.clear();
for (int i = 0; i < n; i++) dist[i] = -1;
dist[S] = 0;
pa[S] = -1;
h.insert(multimap<weight, int>::value_type(0, S));
while (!h.empty())
it = h.begin();
v = it->second;
d = it->first;
h.erase(it);
for (int i = 0; i < r[v].size(); i++)
tmp = d + e[v][i];
int j = r[v][i];
if (dist[j] < 0 || tmp < dist[j])
dist[j] = tmp;
pa[j] = v;
h.insert(multimap<weight, int>::value_type(tmp, j));
}
}
}
}
相关文章推荐
- 单源最短路 Dijkstra O(mlogn) (类实现)
- hdu 2544 最短路(Dijkstra实现)
- 单源最短路 Dijkstra 算法 C++高效实现
- hdu 2112最短路的dijkstra实现
- 单源最短路(Dijkstra)邻接表实现
- poj 1135 最短路(优先队列堆优化Dijkstra实现)
- HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)
- 最短路dijkstra(堆实现)
- HDU2544 最短路 Dijkstra实现
- POJ 1502 MPI Maelstrom(单源最短路|Dijkstra实现)
- 单源最短路 dijkstra + heap 实现
- dijkstra+heap+multiset 实现最短路
- 用邻接map 和队列实现的单源 Dijkstra最短路
- I - Harry Potter and the Final Battle HDU - 3986 最短路加重边,dijkstra的邻接表实现
- 最短路模板——dijkstra,SPFA(邻接表实现)
- 【数据结构】有向图、无向图以及最短路(Dijkstra)算法的C#实现(Template模式)
- 【数据结构】有向图、无向图以及最短路(Dijkstra, Floyd)算法的C#实现(纯模板Template实现)
- 最短路径:Dijkstra,Bellman,SPFA,Floyd算法的实现
- C++实现矩阵图的遍历·最小生成树(prim,kruskal)·最短路径(Dijkstra,floyd)
- Struts(二十四):短路验证&重写实现转换验证失败时短路&非字段验证