hdu2112HDU Today
来源:互联网 发布:kmp算法next数组的含义 编辑:程序博客网 时间:2024/05/17 06:50
题目大意:
就是将所有公交站的站名和公交站之间的时间告诉你,要你求两个站之间所需要花费的最少的时间。其实本题还是一个最短路问题,不同之处就是站点是以字符串的形式给出的,可以用map存键值对的形式来解!
spfa求最短路,加优先级队列优化时间!
#include<stdio.h>#include<map>#include<string.h>#include<string>#include<queue>#include<vector>#define N 10009#define inf 1<<31-1using namespace std;struct node{ int dis; int to;};int dis[N];struct cmp{ bool operator()(const int x,const int y) { return dis[x]>dis[y]; }};map<string ,int >v;vector<node>G[N];bool in_s[N];void spfa(int st,int n,int ed){ priority_queue<int,vector<int>,cmp>s; int i,j,si,ui,di; for(i=0;i<=n;i++){ dis[i]=inf; in_s[i]=false; } s.push(st); in_s[st]=true; dis[st]=0; while(!s.empty()){ si=s.top(); s.pop(); in_s[si]=false; for(i=0;i<G[si].size();i++){ ui=G[si][i].to; di=G[si][i].dis; if(dis[ui]>dis[si]+di){ dis[ui]=dis[si]+di; if(!in_s[ui]){ s.push(ui); in_s[ui]=true; } } } }}int main(){ char a[35],b[35]; int n,st,ed,vi,d,i,v1,v2; node temp; while(scanf("%d",&n)&&n!=-1){ vi=0; v.clear(); for(i=0;i<=n;i++) G[i].clear(); scanf("%s %s",a,b); v[a]=++vi;st=vi; if(v.find(b)==v.end()){ v[b]=++vi;ed=vi; }else{ ed=v[b]; } for(i=1;i<=n;i++){ scanf("%s %s %d",a,b,&d); if(v.find(a)==v.end()){ v[a]=++vi;v1=vi; }else{ v1=v[a]; } if(v.find(b)==v.end()){ v[b]=++vi;v2=vi; }else{ v2=v[b]; } temp.dis=d; temp.to=v2; G[v1].push_back(temp); temp.to=v1; G[v2].push_back(temp); } spfa(st,vi,ed); if(dis[ed]!=inf){ printf("%d\n",dis[ed]); }else{ puts("-1"); } }}
0 0
- hdu2112HDU Today
- hdu2112HDU Today
- HDU2112HDU Today单源最短路
- hdu2112HDU Today trie+map
- hdu2112HDU Today dijkstra最短路
- hdu2112HDU Today(最短路+map)
- Today
- Today.
- today
- Today
- today
- today!
- Today
- today
- today
- today
- Today
- today
- Sybase分页显示存储过程
- Maven学习(五)- 使用Maven构建Struts2项目
- 字符串替换
- 一个分页控件
- 输出二进制补码
- hdu2112HDU Today
- 图书管理系统
- 如何才能恢复手机被删除的短信呢
- Does Java pass by reference or pass by value?
- Spring4 SpringMVC Hibernate4 Freemaker 整合例子
- hadoop学习;block数据块;mapreduce实现例子;UnsupportedClassVersionError异常;关联项目源码
- 友谊长存(递推)
- 如何选用软件找回丢了的文件
- 测试