Dijkstra(优先队列优化)
来源:互联网 发布:仓库管理java源码下载 编辑:程序博客网 时间:2024/04/25 11:31
/*Dijkstra的算法思想:在所有没有访问过的结点中选出dis(s,x)值最小的x对从x出发的所有边(x,y),更新dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y))*/#include <iostream>#include <cstdio>#include <queue>#include <vector>using namespace std;const int Ni = 10000;const int INF = 1<<27;struct node{ int x,d; node(){} node(int a,int b){x=a;d=b;} bool operator < (const node & a) const { if(d==a.d) return x<a.x; else return d > a.d; }};vector<node> eg[Ni];int dis[Ni],n;void Dijkstra(int s){ int i; for(i=0;i<=n;i++) dis[i]=INF; dis[s]=0; //用优先队列优化 priority_queue<node> q; q.push(node(s,dis[s])); while(!q.empty()) { node x=q.top();q.pop(); for(i=0;i<eg[x.x].size();i++) { node y=eg[x.x][i]; if(dis[y.x]>x.d+y.d) { dis[y.x]=x.d+y.d; q.push(node(y.x,dis[y.x])); } } }}int main(){ int a,b,d,m; while(scanf("%d%d",&n,&m),n+m) { for(int i=0;i<=n;i++) eg[i].clear(); while(m--) { scanf("%d%d%d",&a,&b,&d); eg[a].push_back(node(b,d)); eg[b].push_back(node(a,d)); } Dijkstra(1); printf("%d\n",dis[n]); } return 0;}/*6 61 2 23 2 41 4 52 5 23 6 35 6 3*/
0 0
- 优先队列优化 dijkstra
- Dijkstra(优先队列优化)
- Dijkstra优先队列优化
- 优先队列优化Dijkstra算法
- dijkstra+优先队列优化 模板
- dijkstra的优先队列优化
- 优先队列优化Dijkstra-hdu2066
- Dijkstra算法优先队列优化
- 优先队列优化Dijkstra算法
- PriorityQueue+Dijkstra优先队列优化的Dijkstra
- 优先队列优化的Dijkstra算法
- hdu 2680 dijkstra 使用优先队列优化
- 堆(优先队列)优化dijkstra(邻接矩阵)
- dijkstra算法模板(优先队列优化)
- uva10986 优先队列优化的Dijkstra
- Dijkstra + 优先队列 + 邻接表优化
- HDU5521 Meeting(dijkstra+优先队列优化)
- [codevs1021] 玛丽卡 优先队列优化dijkstra
- 欢迎使用CSDN-markdown编辑器
- NYOJ 94 cigarettes
- 题解分析及总结:经典逻辑面试题“假设有一个池塘,里面有无穷多的水,现有2个空水壶,如何使用少于15L的水,用2个水壶从池塘里取得3升水”
- 3617POJ
- 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装
- Dijkstra(优先队列优化)
- [leetcode-94]Binary Tree Inorder Traversal(c++)
- Num 28 : NYOJ : 0106 背包问题 [ 贪心 ]
- 动态规划小结
- MapReduce执行流程详解
- HDU 1231 最大连续子序列(动态规划)
- 相邻图排序
- 只会左键断点?是时候试试这样那样断点了
- haystack论文翻译以及和TFS的对比