UVA - 10986 Sending email (Dijkstra邻接表+优先队列优化)
来源:互联网 发布:网站建设搜索优化 编辑:程序博客网 时间:2024/06/05 10:55
题目大意:
给一个图, 求从s点到t点的最小距离。
解析:
赤裸裸的最短路,但n太大显然是不能用邻接矩阵的,需要对Dijkstra用邻接表+优先队列优化。
给一个图, 求从s点到t点的最小距离。
解析:
赤裸裸的最短路,但n太大显然是不能用邻接矩阵的,需要对Dijkstra用邻接表+优先队列优化。
这里我把Dijkstra的邻接表+优先队列的方法封装成了一个类,感觉挺好用的。
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 20005;struct Edge {int from, to, dist;Edge(int u,int v,int d) {from = u;to = v;dist = d;}};struct HeapNode {int d, u;HeapNode(int _d,int _u) {d = _d;u = _u;}bool operator < (const HeapNode& rhs) const {return d > rhs.d;}};struct Dijkstra {int n,m;vector<Edge> edges;vector<int> G[maxn];bool done[maxn]; //是否被永久标记int d[maxn]; //s到各个点的距离int p[maxn]; //最短路上的一条弧void init(int n) {this->n = n;for(int i = 0; i < n; i++) {G[i].clear();}edges.clear();}void AddEdge(int from,int to,int dist) {edges.push_back(Edge(from,to,dist));m = edges.size();G[from].push_back(m-1);}void dijkstra(int s) {priority_queue<HeapNode> Q;for(int i = 0; i < n; i++) {d[i] = INF;}d[s] = 0;memset(done,0,sizeof(done));Q.push(HeapNode(0,s));while(!Q.empty()) {HeapNode x = Q.top();Q.pop();int u = x.u;if(done[u]) {continue;}done[u] = true;for(int i = 0; i < G[u].size(); i++) {Edge& e = edges[G[u][i]];if(d[e.to] > d[u] + e.dist) {d[e.to] = d[u] + e.dist;p[e.to] = G[u][i];Q.push(HeapNode(d[e.to], e.to));}}}}};int main() {Dijkstra dij;int t,cas = 1;int n,m;int u,v,dist;int s,e;scanf("%d",&t);while(t--) {scanf("%d%d%d%d",&n,&m,&s,&e);dij.init(n);for(int i = 0; i < m; i++) {scanf("%d%d%d",&u,&v,&dist);dij.AddEdge(u,v,dist);dij.AddEdge(v,u,dist);}dij.dijkstra(s);printf("Case #%d: ",cas++);if(dij.d[e] == INF) {printf("unreachable\n");}else {printf("%d\n",dij.d[e]);}}return 0;}
0 0
- UVA - 10986 Sending email (Dijkstra邻接表+优先队列优化)
- UVa 10986 Sending email / 优先队列优化dijkstra
- Sending email - UVa 10986 Dijkstra+优先队列优化
- UVa 10986 Sending email (最短路+Dijkstra队列优化)
- UVa 10986 Sending email 优先队列优化的dijkstra 和 朴素dijkstra 效率对比
- UVa 10986 - Sending email (Dijkstra优化, SPFA)
- UVA 10986Sending email 【dijkstra + 堆优化】
- uva 10986 Sending email (dijkstra)
- UVA 10986 - Sending email(最短路 优先队列的优化+Bellman-Ford)
- Dijkstra + 优先队列 + 邻接表优化
- uva 10986 - Sending email(最短路Dijkstra)
- Sending email - dijkstra无向图 + 优先队列
- Dijkstra(邻接表+优先队列)
- Sicily 1031 Campus(Dijkstra[邻接表+优先队列优化])
- Sicily 1031 Campus(Dijkstra[邻接表+优先队列优化])
- Dijkstra[两种邻接表+优先队列优化]
- [POJ](3255)Roadblocks---- 最(次)短路径(邻接表+dijkstra优先队列优化)
- CUGB图论专场:B - ROADS(邻接表+dijkstra优先队列优化)
- 用Log4j自动生成日志
- atitit.解决SyntaxError: missing ] after element list"不个object 挡成个str eval ....
- POJO与JavaBean
- iOS开发UI篇—xib的简单使用
- Coursera Algorithm, Part2 Week1: Undirected Graph & Directed Graph
- UVA - 10986 Sending email (Dijkstra邻接表+优先队列优化)
- 手动破解的 Linux下的Maltab 2014b
- 黑马程序员——OC知识点总结(一)
- Mac下 wine 打开程序中文乱码,亲测可用,故转载。
- 分布式缓存GemFire架构介绍
- 装了php(php-fpm)和nginx却无法显示php页面
- 黑马程序员——面向对象思想、设计类与创建对象、对象与函数、方法与函数、合理设计类
- c之排序问题---冒泡排序
- 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站