UVa:10801 Lift Hopping (Bellmanford求最短路)
来源:互联网 发布:自制车载香 知乎 编辑:程序博客网 时间:2024/06/03 22:58
其实还是个最短路的问题,但是建图略微麻烦。同一个电梯里相邻停留的楼层之间连边,有多个电梯停留的同一楼层之间连边。比较麻烦,我们可以从边的角度出发因此使用Bellmanford算法。这样求最短路就需要开一个二维数组,用1维表示电梯另1维表示楼层。
核心是dist[T][to]>dist[F][from]+w。
另外就是注意读取可以停留的楼层要用字符串读。dist[][]要将可以在0层停留的电梯初始化为0,其余为无穷大以表示不可到达。
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;struct Edge{ int A,B,a,b,weight; void set(int AA,int BB,int aa,int bb,int cc) { A=AA; B=BB; a=aa; b=bb; weight=cc; }};int main(){ int n,K; while(scanf("%d%d",&n,&K)!=EOF) { int t[6]= {0}; for(int i=0; i<n; ++i) scanf("%d",&t[i]); getchar(); Edge p[10000]; int N=0; bool have[6][105]= {0}; for(int i=0; i<n; ++i) { char c; int num=0,fro=-1; while(scanf("%c",&c)) { if(isdigit(c)) num=num*10+c-'0'; else { for(int k=0; k<n; ++k) if(have[k][num]) { p[N++].set(i,k,num,num,60); p[N++].set(k,i,num,num,60); } have[i][num]=true; if(fro!=-1) { p[N++].set(i,i,fro,num,(num-fro)*t[i]); p[N++].set(i,i,num,fro,(num-fro)*t[i]); } fro=num; num=0; } if(c=='\n') break; } } int dist[6][105]; memset(dist,0x7f,sizeof(dist)); int INF=dist[0][0]; for(int i=0; i<n; ++i) if(have[i][0]) dist[i][0]=0; while(1) { bool update=false; for(int i=0; i<N; ++i) { int &from=p[i].a,&to=p[i].b,&F=p[i].A,&T=p[i].B,&w=p[i].weight; if(dist[F][from]!=INF&&dist[T][to]>dist[F][from]+w) { dist[T][to]=dist[F][from]+w; update=true; } } if(!update) break; } int ans=INF; for(int i=0; i<n; ++i) ans=min(dist[i][K],ans); if(ans==INF)puts("IMPOSSIBLE"); else printf("%d\n",ans); } return 0;}
- UVa:10801 Lift Hopping (Bellmanford求最短路)
- uva 10801 - Lift Hopping(最短路Dijkstra)
- UVA 10801 Lift Hopping (最短路)
- UVA - 10801 Lift Hopping 最短路
- Lift Hopping (Uva 10801 最短路)
- UVA 10801 Lift Hopping(最短路)
- uva 10801 Lift Hopping Dijkstra最短路
- UVa 10801 - Lift Hopping(Dijkstra, SPFA最短路)
- UVa 10801 Lift Hopping (最短路+Dijkstra+建图)
- UVA 10801 - Lift Hopping (Dijkstra算法/最短路)
- 习题11-7 UVa 10801 Lift Hopping SPFA最短路
- UVA 10801 Lift Hopping
- uva 10801 - Lift Hopping
- UVa 10801 - Lift Hopping
- uva 10801 - Lift Hopping
- UVA 10801 Lift Hopping
- UVA 10801 Lift Hopping
- uva 10801 - Lift Hopping
- 解决Windows7 Embedded连接手机问题
- MongoDB
- 英文脏话大全
- [WinForm]dataGridView导出到EXCEL
- POJ3261--Milk Patterns
- UVa:10801 Lift Hopping (Bellmanford求最短路)
- 博客开通
- 中医公布身体6个“救命”穴位
- 索引重建SQL语句
- hdu 4576 Robot
- BOOL和bool的区别
- 零言碎语
- 我要改变世界改变自己
- HDU 1874 畅通工程续