hdu2112 HDU Today
来源:互联网 发布:易语言ddos源码 编辑:程序博客网 时间:2024/05/10 21:55
map好像挺慢的
#include<iostream>#include<string>#include<cstdio>#include<map>#define INF 0x3f3f3f3fusing namespace std;int dis[155][155],cost[155];bool vis[155];map<string,int>list;void dijkstra(int s,int t,int len){int i,j,mini;int pos;for(i=1;i<=len;i++){vis[i]=0;cost[i]=dis[s][i];}vis[s]=1;cost[s]=0;for(i=1;i<=len-1;i++){mini=INF;pos=i; //这一步纯粹是为了保险for(j=1;j<=len;j++)if(!vis[j]&&cost[j]<mini){mini=cost[j];pos=j;}if(mini>=INF||pos==t) break; //出发点道目的地路径不存在或者已经找到最短路径时就没有必要再算下去了vis[pos]=1;for(j=1;j<=len;j++)if(!vis[j]&&cost[pos]+dis[pos][j]<cost[j])cost[j]=cost[pos]+dis[pos][j];}if(cost[t]>=INF)printf("-1\n");elseprintf("%d\n",cost[t]);}int main(){int n;string start,dest,from,to;int route;while(scanf("%d",&n)&&n!=-1){list.clear();memset(dis,0x3f,sizeof(dis));int len=1;cin>>start>>dest;while(n--){cin>>from>>to>>route;if(list.find(from)==list.end())list[from]=len++;if(list.find(to)==list.end())list[to]=len++;if(route<dis[list[from]][list[to]]) //去除万恶的重边dis[list[from]][list[to]]=dis[list[to]][list[from]]=route; //路线是双向的,题目也没说清楚比较坑爹}if(list.find(start)==list.end()||list.find(dest)==list.end()){printf("-1\n"); continue;}dijkstra(list[start],list[dest],len-1);}return 0;}
- HDU today(HDU2112)
- hdu2112-HDU Today
- hdu2112 HDU Today
- hdu2112 HDU Today (Dijkstra)
- HDU2112:HDU Today
- HDU2112:HDU Today(Dijkstra)
- hdu2112 HDU Today---dij
- HDU2112 HDU Today
- hdu2112 HDU Today
- HDU2112:HDU Today(Dijkstra)
- HDU2112 HDU Today 【Dijkstra】
- hdu2112- HDU Today
- HDU2112-HDU Today
- hdu2112-HDU Today
- HDU Today HDU2112
- HDU2112 HDU Today 单源最短路
- hdu2112 HDU Today(最短路)
- hdu2112 HDU Today(dijkstra+map)
- [ACM]n a^o7 !
- 买不到的数目
- HDU1039:Easier Done Than Said?
- 回溯算法—n皇后问题
- 关于链表算法题的双指针
- hdu2112 HDU Today
- 为什么大人学英语这么难?
- GIS开源软件大全
- cocos2d相关资料
- ColorDialog的调用方式
- Routes Resource
- linux内核“任务”之定时器、内核线程、系统调用
- Ubuntu 为eclipse 添加 快捷启动
- 回车和换行