hdu1874
来源:互联网 发布:Minecraft mac光影 编辑:程序博客网 时间:2024/06/15 08:10
总共四种做法,dijkstra,bellman,spfa,floyd都可以做(主要因为数据比较小),如果数据比较大的话,用dijkstra和spfa比较合理,方法较为固定。以下是dijkstra的代码。
#include <iostream>#include <memory.h>#include <queue>using namespace std;int v[10002],next[10002],w[10002];int first[202],d[202],e;typedef pair<int,int> pii;void init(){ e = 0; memset(first,-1,sizeof(first));}void add_edge(int a,int b,int c){ v[e] = b;next[e] = first[a];w[e] = c;first[a] = e++;}void dijkstra(int src){ priority_queue <pii,vector<pii>,greater<pii> > q; memset(d,-1,sizeof(d)); d[src] = 0; q.push(make_pair(0,src)); while(!q.empty()){ while(!q.empty() && q.top().first > d[q.top().second]) q.pop(); if(q.empty()) break; int u = q.top().second; q.pop(); for(int i = first[u];i != -1;i = next[i]){ if(d[v[i]] == -1 || d[v[i]] > d[u] + w[i]){ d[v[i]] = d[u] + w[i]; q.push(make_pair(d[v[i]],v[i])); } } }}int main(){ int n,m,a,b,c,x,y; while(cin >> n >> m && n + m > 0){ init(); for(int i = 0;i < m;i ++){ cin >> a >> b >> c; add_edge(a,b,c); add_edge(b,a,c); } cin >> x >> y; dijkstra(x); cout << d[y] << endl; } return 0;}
0 0
- hdu1874
- hdu1874
- hdu1874
- HDU1874
- hdu1874
- HDU1874
- hdu1874
- hdu1874
- hdu1874
- hdu1874
- hdu1874
- hdu1874
- hdu1874
- hdu1874(dijkstra)
- hdu1874 dijkstra
- hdu1874 dijkstra
- hdu1874畅通工程续
- hdu1874最短路
- android面试题库
- C#:直接在DataGridView控件中修改数据
- linux内核头文件 cdev.h 解析
- HashMap与Hashtable的区别
- PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)
- hdu1874
- ×【leetcode】Binary Tree Maximum Path Sum
- hdu 1073 Online Judge
- 关于C++ const 的全面总结
- 关于构造函数
- 数据仓库工作日记_记录(二)-数据治理下
- 马士兵struts2视频教程第十八集
- 使用java语言编写简易计算器
- 技术日记