hdu 2112 最短路 dijkstra优先队列
来源:互联网 发布:c 多线程编程 视频 编辑:程序博客网 时间:2024/05/19 03:16
http://acm.hdu.edu.cn/showproblem.php?pid=2112
还算蛮裸的,就是需要运用一下map,将字符串映射成一个int,对于map的运用还不够熟悉。。。
Map如果要查找一个元素是否出现在这个map之中的话就可以运用.count(),看他出现的次数,如果是0,肯定就没有出现过。还有一个就是要注意,每一个kase都需要重置这个map,运用.clear()。
这道题的图是无向图,因为公交的起点和终点可以互换的。。。没有考虑,一开始只写了单向。。
dijkstra优先队列 代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <map>#include <vector>using namespace std;#define M 10009#define INF 0x3f3f3f3ftypedef pair<int,int> P;struct edge{ int to,w;};int dis[M];int n;vector<edge> g[M];map <string,int> mp;void dij(int u){ fill(dis,dis+n,INF); priority_queue <P, vector <P> , greater <P> > q; //优先队列 dis[u] = 0; q.push(P(dis[u],u)); while(!q.empty()) { P p = q.top(); q.pop(); int v = p.second; if(dis[v] < p.first) continue; for(int i = 0;i < g[v].size();i++) //记得是遍历 v所相邻的边。。一开始写成了u.. { edge e = g[v][i]; if(dis[e.to] > dis[v]+e.w) { dis[e.to] = dis[v]+e.w; q.push(P(dis[e.to],e.to)); } } }}int main(){ while(scanf("%d",&n)==1 && n!=-1) { for(int i = 0;i < n;i++) g[i].clear(); //清空vector mp.clear();//清除map中的所有元素。 int k = 0; char s[50],e[50]; scanf("%s %s",s,e); if(!mp.count(s)) //判断这个字符串是否出现在map中过 mp[s] = k++; if(!mp.count(e)) mp[e] = k++; //终点所对应的编号 for(int i = 0;i < n;i++) { char a[50],b[50]; int temp; scanf("%s %s %d",a,b,&temp); if(!mp.count(a)) mp[a] = k++; if(!mp.count(b)) mp[b] = k++; edge e ; e.to = mp[b];e.w = temp; g[mp[a]].push_back(e); e.to = mp[a]; //无向图。。WA一次,,对于车来说起点站和终点站是可以互换的。 g[mp[b]].push_back(e); } dij(0); if(dis[mp[e]]!=INF) printf("%d\n",dis[mp[e]]); else printf("-1\n",dis[mp[e]]); } return 0;}
0 0
- hdu 2112 最短路 dijkstra优先队列
- HDU 2544 最短路 静态邻接表+优先队列 dijkstra
- hdu 2066最短路 dijkstra 及其优先队列优化
- hdu 2544 最短路(Dijkstra 邻接表+优先队列)
- 优先队列Dijkstra实现最短路算法
- 最短路(Dijkstra+优先队列)
- hdu2544 最短路(dijkstra/优先队列)
- dijkstra + 优先队列 最短路 [sdut 2143]
- hdu-2544-最短路(Dijkstra + Dijkstra优先队列 + Bellman-ford + SPFA +Floyd) 纯模板题
- [HDU 2544][dijkstra+队列][SPFA]最短路
- HDU 1874-畅通工程续(最短路Dijkstra+优先队列)
- 【HDU】-2066-一个人的旅行(最短路)(dijkstra+优先队列)
- hdu 2112 dijkstra+优先队列
- HDOJ 4318 —— dijkstra + 优先队列 求最短路
- [最短路]使用优先队列优化的Dijkstra算法
- 【poj 1724】 ROADS 最短路(dijkstra+优先队列)
- 图论: 优先队列 + dijkstra最短路…
- 算法训练 最短路 dijkstra优先队列和spfa
- 字符串转十六进制 十六进制转字符串
- oracle存储过程3
- http://blog.csdn.net/huangyanbin123/article/details/38943575
- Digital Raw Capture 笔记
- UVa 10285 Longest Run on a Snowboard [DP]
- hdu 2112 最短路 dijkstra优先队列
- spring执行定时任务
- 网易音乐接口
- Working with Struts 2 actions 读书笔记
- texlive ubuntu dvi xdvi tex 反向搜索
- emulator和simulator的区别
- C语言 二维数组下标为变量的初始化方法
- ejabberd集群
- ubuntu14.04LTS下创建Qt5.4.1桌面快捷方式