HDU Today (最短路径+map)
来源:互联网 发布:巴基斯坦 知乎 编辑:程序博客网 时间:2024/05/17 23:46
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0< t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
Output
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
Sample Input
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
Sample Output
50
1、先开始感觉跟之前做的一样,就是把数字改成了字符串,但是想想就不知道该怎么把这两个一一对应上,看了参考原来是用map容器,今天学到了~map用起来还是很方便的,包含一下头文件map,声明map<,>m,将其初始化为0,然后就跟数组一样对应就好了。
2、然后就是用dijkstra,经过上一题的悲惨经历,虽然还有点没理解,不过能大概敲出来了= =
3、还有就是交的时候还re了两次,应该是因为数组越界了,所以在dijkstra求每一次的最小边时,如果求出的minn已经是inf了,就break已经不用再求了。
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>#include <queue>#include <cmath>#include <string>#define inf 0x3f3f3f3f#include <map>using namespace std;int mapp[170][170], i, j, cst[170], vis[170], cnt;void dij(){ int p, minn; memset(vis, 0, sizeof(vis)); for(i=1; i<=cnt; i++) cst[i]=mapp[1][i]; vis[1]=1; for(i=1; i<=cnt; i++){ minn=inf; for(j=1; j<=cnt; j++){ if(cst[j]<minn && !vis[j]) { p=j; minn=cst[j]; } } if(minn==inf)break; vis[p]=1; for(j=1; j<=cnt; j++){ if(cst[p]+mapp[p][j]<cst[j] && !vis[j]) cst[j]=cst[p]+mapp[p][j]; } }}int main(){ int N; while(~scanf("%d", &N)){ if(N==-1)break; map<string, int>mp; mp.clear(); memset(mapp, inf, sizeof(mapp)); string s1, s2; int flag=0; cin>>s1>>s2; if(s1==s2)flag=1; mp[s1]=1; mp[s2]=2; cnt=3; while(N--){ string ss1, ss2; int c; cin>>ss1>>ss2>>c; if(!mp[ss1])mp[ss1]=cnt++; if(!mp[ss2])mp[ss2]=cnt++; mapp[mp[ss1]][mp[ss2]]=mapp[mp[ss2]][mp[ss1]]=c; } if(flag){printf("0\n"); continue;} dij(); if(cst[2]==inf)printf("-1\n"); else printf("%d\n", cst[2]); } return 0;}
- HDU Today (最短路径+map)
- HDU Today 【最短路径】+【构造map】
- 杭电2112HDU Today(map 最短路径)
- HDU2112 HDU Today(最短路径)
- HDU Today (最短路径问题)
- hdu 题目2122 HDU Today (最短路径,Dijkstra)
- [最短路径] HDU 2112 - HDU Today
- HDOJ 题目2112 HDU Today(最短路径)
- HDOJ 题目2112 HDU Today(最短路径)
- hdoj--2112 HDU Today(最短路径)
- HDU Today Dijkstra 最短路径
- 【最短路径-Floyd】hdu 2112 HDU Today
- HDU 2112— HDU Today,最短路径算法,Dijkstra
- HDU 2112 HDU Today 【最短路径 dijkstra & floyed & SPFA 】
- HDU 2112.HDU Today【最短路径(Dijsktra算法+字符串)】【4月17】
- 最短路径——Floyd算法HDU Today(hdu2112)
- 最短路径——Dijkstra算法HDU Today(hdu2112)
- HDU 2112HDU Today(dijk最短路+map)
- linux 操作系统 一.linux 操作系统概述 1.常见操作系统
- java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题
- C语言_标准I/O库
- NOIP 提高组 初赛 四、阅读程序写结果 习题集(一)NOIP1998-NOIP1999
- LeetCode Weekly Contest 41解题思路
- HDU Today (最短路径+map)
- 简单通讯录的实现
- n-queens-ii
- “模板文件不存在,无法解析文档”的几种解决办法
- 计算时间函数使用(AddDays)与隐藏域
- 带有修饰词的内部类
- 乐曲创作
- Python安装jieba包,进行分词
- HBase是什么?