HDU2112---HDU Today(dijkstra)&&(map+SPFA)
来源:互联网 发布:php javascript 传值 编辑:程序博客网 时间:2024/05/18 03:37
#include<stdio.h>#include<string.h>#define M 1000007#define inf 0xffffffusing namespace std;int map[2222][2222],dist[2222],vis[2222],k;char s[160][40],s1[40],s2[40];void init(){ for(int i=1;i<200;i++) for(int j=1;j<200;j++) if(i==j)map[i][j]=0; else map[i][j]=inf;}int dijkstra(int u,int v){ memset(vis,0,sizeof(vis)); for(int i=1;i<=k;i++) dist[i]=map[u][i]; dist[u]=0; vis[u]=1; for(int i=1;i<k;i++) { int pos=u,min=inf; for(int j=1;j<=k;j++) if(!vis[j] && dist[j]<min) { pos=j; min=dist[j]; } vis[pos]=1; for(int j=1;j<=k;j++) { if(!vis[j] && dist[j]>dist[pos]+map[pos][j]) dist[j]=dist[pos]+map[pos][j]; } } return dist[v]==inf?-1:dist[v];}int main(){ int n; while(scanf("%d",&n)!=EOF) {if(n==-1) break; int flag=0;k=2; init(); scanf("%s%s",&s[1],&s[2]); int a,b,c; while(n--) { scanf("%s%s%d",&s1,&s2,&c); flag=0; for(int i=1;i<=k;i++) if(strcmp(s1,s[i])==0) {a=i,flag=1;break;} if(!flag) strcpy(s[++k],s1),a=k; flag=0; for(int i=1;i<=k;i++) if(strcmp(s2,s[i])==0) {b=i;flag=1;break;} if(!flag) strcpy(s[++k],s2),b=k; if(map[a][b]>c) map[a][b]=map[b][a]=c; } // for(int i=1;i<k;i++) printf("%s-- ",s[i]); if(strcmp(s[1],s[2])==0) printf("0\n"); else printf("%d\n",dijkstra(1,2)); } }
</pre><pre class="cpp" name="code" snippet_file_name="blog_20150512_3_8342708" code_snippet_id="664678">关键是对于已经有的车站查找,和放置未出现的车站,注意细节。
</pre><p>map+spfa 发在博客上的第一个和map容器有关的题。</p><pre class="cpp" name="code">#include<set>#include<stdio.h>#include<map>#include<string.h>#include<iostream>#include<string>#include<queue>using namespace std;#define inf 0xfffffint maze[155][155],vis[155],dis[155],n,m;void inti(){ for(int i=1;i<155;i++) for(int j=1;j<155;j++) maze[i][j]=inf;}int SPFA(){ for(int i=1;i<=m;i++) dis[i]=inf; queue<int>q; q.push(1); vis[1]=1; dis[1]=0; while(!q.empty()) { int now=q.front(); q.pop(); vis[now]=0; for(int i=1;i<=m;i++) { if(dis[i]>dis[now]+maze[now][i]) { dis[i]=dis[now]+maze[now][i]; if(!vis[i]) { q.push(i); vis[i]=1; } } } } if(dis[2]>=inf) return -1; else return dis[2];}int main(){ map<string,int>mp; char s[31],t[31],st[31],tt[31]; while(scanf("%d",&n),n!=-1) { int c; m=0; inti(); mp.clear(); map<string,int>mp; scanf("%s %s",&st,&tt); mp[st]=++m; if(mp[tt]==0) mp[tt]=++m; for(int i=0;i<n;i++){ scanf("%s%s%d",&s,&t,&c); if(mp[s]==0) mp[s]=++m; if(mp[t]==0) mp[t]=++m; if(maze[mp[s]][mp[t]]>c) maze[mp[s]][mp[t]]=maze[mp[t]][mp[s]]=c; } int k=SPFA(); if(mp[st]==mp[tt]) printf("0\n"); else printf("%d\n",k);}}
0 0
- HDU2112---HDU Today(dijkstra)&&(map+SPFA)
- hdu2112 HDU Today(dijkstra+map)
- hdu2112 HDU Today (Dijkstra)
- HDU2112:HDU Today(Dijkstra)
- HDU2112:HDU Today(Dijkstra)
- HDU2112 HDU Today 【Dijkstra】
- hdu2112 HDU Today (最短路之dijkstra和spfa)
- HDU2112——HDU Today(map容器+spfa)
- HDU2112-HDU Today(Floyd & Dijkstra)
- HDU2112~HDU Today Dijkstra算法 最短路
- hdu2112 HDU Today(dijkstra求单源最短路)
- hdu2112 HDU Today (floyd+stl-map)
- HDU2112-HDU Today-最短路(dijkstra+字符转换)
- HDU today(HDU2112)
- hdu2112-HDU Today
- hdu2112 HDU Today
- HDU2112:HDU Today
- hdu2112 HDU Today---dij
- Android 抽屉效果的导航菜单实现
- RedisObject和VMPointer
- HR要扔这样的简历,你哭也没用!
- Windows下用eclipse玩C-C++及安卓相关环境及工具
- android自定义listview实现圆角
- HDU2112---HDU Today(dijkstra)&&(map+SPFA)
- 谈谈长连接和NIO
- shell脚本编译java
- 查看机子安装的ubuntu用的版本和位数
- Learning how to learn: How to teach yourself。
- boost:unordered_map和std::map的使用详解和性能比较
- c++获取cpu信息
- tooltips链接
- struts学习笔记之十一(异常)