hdu 2112 HDU Today 最短路spfa+容器map
来源:互联网 发布:4g网络优化师 编辑:程序博客网 时间:2024/06/06 09:30
题意:给出m条路,求给出的两个站的最短路。站名为字符串。
这题题目不难但有几个注意点。一是注意map的使用,要记得清容器。这题有重边,注意重边的处理。注意站的数量最多只有150,路的数量可达到10000。
#include <iostream>#include<cstdio>#include<cmath>#include<cstring>#include<queue>#include<map>#define N 170#define INF 0x7ffffffusing namespace std;int cnt,n,a[N][N],d[N],v[N];int spfa(int s,int t){ if(s==t) return 0; for(int i=1;i<=cnt;i++) d[i]=INF,v[i]=0; queue<int> q; d[s]=0; v[s]=1; q.push(s); while(!q.empty()) { int c=q.front(); q.pop(); v[c]=0; for(int i=1;i<=cnt;i++) { if(d[i]>d[c]+a[c][i]) { d[i]=d[c]+a[c][i]; if(!v[i]) v[i]=1,q.push(i); } } } if(d[t]>=INF) return -1; return d[t];}int main(){ while(~scanf("%d",&n)&&n!=-1) { for(int i=1;i<N;i++) for(int j=1;j<N;j++) a[i][j]=INF; map<string,int>mp; mp.clear(); char s[110],t[110]; scanf("%s%s",&s,&t); cnt=0; mp[s]=++cnt; if(mp[t]==0) mp[t]=++cnt; for(int i=0;i<n;i++) { int c; char ss[110],tt[110]; scanf("%s%s%d",&ss,&tt,&c); if(mp[ss]==0) mp[ss]=++cnt; if(mp[tt]==0) mp[tt]=++cnt; if(a[mp[ss]][mp[tt]]>c) a[mp[ss]][mp[tt]]=a[mp[tt]][mp[ss]]=c; } cout<<spfa(mp[s],mp[t])<<endl; }}
0 0
- hdu 2112 HDU Today 最短路spfa+容器map
- HDU 2112 HDU Today【最短路+map容器,spfa算法+Dijkstra算法】
- hdu 2112HDU Today 最短路+map
- HDU 2112 HDU Today(最短路 SPFA Floyd-Warshall算法)
- hdu 2112 Today(最短路 dijkstra+map容器的用法)and 1217(floyd+map)
- HDOJ 2112 HDU Today (最短路 Dijkstra && SPFA)
- HDU 2112HDU Today(dijk最短路+map)
- HDU 2112 HDU Today 最短路问题map+floyd
- HDU 2112 HDU Today (最短路---dijkstra+map函数)
- hdu 2923 Einbahnstrasse 最短路spfa+map容器
- hdu 2112 HDU Today(SPFA+map)
- HDU Today 最短路
- hdu 2112 HDU Today( 最短路)
- HDU 2112 HDU Today(最短路)
- hdu 2112 HDU Today(最短路)
- hdu 2112 HDU Today 最短路
- HDU 2112HDU Today (最短路)
- hdu 2112 HDU Today (最短路)
- 27.二重指针和二维数组
- LevelDb
- 第二次作业
- LevelDb
- 视频转gif图片格式-好用的软件
- hdu 2112 HDU Today 最短路spfa+容器map
- flash AS3.0学习笔记-拖动棋子(吸附)到棋盘对应网格中心
- 英伟达硬件加速解码器在 FFMPEG 中的使用
- Java内存区域与内存溢出异常
- android 图像渲染(Shader)
- 南阳题目206-矩形的个数
- HDU2045 RPG难题
- 第4周项目5-用递归方法求解3
- bash shell 编程练习二