HDU2544 最短路dij
纯最短路。
- ///HDU 2544堆优化的最短路
- #include <cstdio>
- #include <iostream>
- #include <sstream>
- #include <cmath>
- #include <cstring>
- #include <cstdlib>
- #include <string>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <stack>
- #include <algorithm>
- using namespace std;
- #define ll long long
- #define _cle(m, a) memset(m, a, sizeof(m))
- #define repu(i, a, b) for(int i = a; i < b; i++)
- #define repd(i, a, b) for(int i = b; i >= a; i--)
- #define sfi(n) scanf("%d", &n)
- #define pfi(n) printf("%d\n", n)
- const int MAXN = ;
- const int MAXM = ;
- const int INF=0x3f3f3f3f;
- struct Node
- {
- int to,next,w;
- } edge[MAXM];
- struct HeapNode
- {
- int d, u;
- bool operator < (const HeapNode& rhs) const
- {
- return d > rhs.d;
- }
- };
- struct Dijkstra
- {
- int head[MAXN],d[MAXN];
- bool done[MAXN];
- int cnt;
- void init()
- {
- memset(head,-,sizeof(head));
- cnt = ;
- }
- void AddEdge(int u, int v, int w)
- {
- edge[cnt].to=v,edge[cnt].next=head[u];
- edge[cnt].w=w,head[u]=cnt++;
- edge[cnt].to=u,edge[cnt].next=head[v];
- edge[cnt].w=w,head[v]=cnt++;
- }
- void dijkstra(int s,int n)
- {
- priority_queue<HeapNode> Q;
- for(int i = s; i <= n; i++)
- d[i] = INF;
- d[s] = ;
- memset(done, , sizeof(done));
- Q.push((HeapNode)
- {
- , s
- });
- while(!Q.empty())
- {
- HeapNode x = Q.top();
- Q.pop();
- int u = x.u;
- if(done[u]) continue;
- done[u] = true;
- for(int i=head[u]; i!=-; i=edge[i].next)
- {
- int v=edge[i].to;
- if(d[v] > d[u] + edge[i].w)
- {
- d[v] = d[u] + edge[i].w;
- Q.push((HeapNode)
- {
- d[v], v
- });
- }
- }
- }
- }
- } dij;
- int main()
- {
- int n,m,a,b,c;
- while(scanf("%d%d",&n,&m),n+m)
- {
- dij.init();
- repu(i,,m)
- {
- scanf("%d%d%d",&a,&b,&c);
- dij.AddEdge(a,b,c);
- dij.AddEdge(b,a,c);
- }
- dij.dijkstra(,n);
- printf("%d\n",dij.d[n]);
- }
- return ;
- }
堆优化的Dij
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <set>
- #include <map>
- using namespace std;
- const int maxn=;
- const int INF=0x3f3f3f3f;
- struct Edge
- {
- int u, v, d;
- Edge(int u, int v, int d):u(u), v(v), d(d) {}
- };
- struct qnode
- {
- int u,d;
- qnode(int u, int d):u(u), d(d) {}
- bool operator < (const qnode a)const
- {
- return d>a.d;
- }
- };
- struct Dijkstra
- {
- int n;
- vector<int> G[maxn];
- vector<Edge> edge;
- int d[maxn];
- bool vis[maxn];
- void init(int n)
- {
- this->n = n;
- for(int i=; i<=n; i++)
- {
- G[i].clear();
- vis[i]=;
- d[i]=INF;
- }
- edge.clear();
- }
- void AddEdge(int u, int v, int d)
- {
- G[u].push_back(edge.size());
- edge.push_back(Edge(u, v, d));
- }
- void dijkstra(int s)
- {
- priority_queue<qnode> q;
- d[s]=;
- q.push(qnode(s, ));
- while(!q.empty())
- {
- qnode x=q.top();
- q.pop();
- if(vis[x.u])
- continue ;
- vis[x.u]=true;
- for(int i=; i<G[x.u].size(); i++)
- {
- Edge& e=edge[G[x.u][i]];
- if(d[e.v]>d[x.u]+e.d)
- {
- d[e.v]=d[x.u]+e.d;
- q.push(qnode(e.v, d[e.v]));
- }
- }
- }
- }
- } dij;
- int main()
- {
- int n, m;
- while(scanf("%d%d", &n, &m),n+m)
- {
- dij.init(n);
- while(m--)
- {
- int u, v, w;
- scanf("%d%d%d", &u, &v, &w);
- dij.AddEdge(u, v, w);
- dij.AddEdge(v, u, w);
- }
- dij.dijkstra();
- printf("%d\n",dij.d[n]);
- }
- return ;
- }
邻接矩阵Dij
本来以为这两个时间效率相差会很大,看来只在稠密图中奏效。
当图稠密起来后一般需要用堆优化的dijkstra。。。
HDU2544 最短路dij的更多相关文章
- 天梯赛 L2-001 紧急救援 (最短路 dij)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
- HDU 6071 Lazy Running (同余最短路 dij)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU-2544 最短路 Dijkstra模板题
题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...
- hdu2544 最短路 Dijkstra算法
最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU2544 最短路 2017-04-12 18:51 31人阅读 评论(0) 收藏
最短路 Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- hdu2544最短路(floyd基础)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU2544最短路模板,
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> ...
- 最短路径(最基础,经典的模板和思想):HDU-2544最短路
题目: 最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- [hdu2544]最短路spfa
解题关键:最短路模板一直没整理过,这里整理了一下spfa+链式前向星建图的最短路模板,以后网络赛省的打了. spfa算法的关键就是松弛操作,只有进行松弛操作,其后的点距离才可能被更新. #includ ...
随机推荐
- spring beans
所 有 使 用 XML 文 件 进 行 配 置 信 息 加 载 的 Spring IoC 容 器 , 包 括 BeanFactory 和ApplicationContext的所有XML相应实现,都使用 ...
- @@identity的使用
-- ============================================= -- Author: Qiuhua,Huang -- Create date: 08/09/2012 ...
- 16090202(剑灵GPA)
[目标] 剑灵GPA [思路] 1 2 绘制角色DrawCall body 5526面片 2.1[第一个DrawCall]63 RT 这个DrawCall PS VS 参数列表 VS // // Ge ...
- Windows中一个22年的漏洞
X Windows系统,今天作为世界各地的Linux桌面,已经存在超过20年了,仍然存在Bug.几天前Sysadmins为libXfont库提供了补丁,来对应新发现的已经在代码中存在了22年的特权升 ...
- mongo virtual
var options={"upsert":false,"multi":false,'new':false}; 不存是否插入,更新是否批量,返回内容是更新前还是 ...
- 发布自己的pods到CocoaPods trunk 及问题记录
这两天准备把之前写的一些小玩意添加到pods库中去,参考了一些资料后进行操作,实际中也遇到了一些问题,记录下来,问题及解决方式在后面. 参考内容转载如下: 首先更新了用trunk之后,CocoaPod ...
- [导读]Learning from Imbalanced Classes
原文:Learning from Imbalanced Classes 数据不平衡是一个非常经典的问题,数据挖掘.计算广告.NLP等工作经常遇到.该文总结了可能有效的方法,值得参考: Do nothi ...
- SVN相关
Eclipse SVN忽略一些文件夹:Windows -> Preferences -> Team -> Ignored Resources里点 “Add Pattern”,然后把 ...
- jquery qrcode参数
{ // render method: 'canvas', 'image' or 'div' render: 'canvas', // version range somewhere in 1 .. ...
- CSS3入门--线条动画特效实例
HTML: <div></div> CSS: div{ width: 200px; height: 200px; margin: 200px auto; background: ...