首页 > 代码库 > hdu 1690 Bus System(最短路)
hdu 1690 Bus System(最短路)
问题:
链接:点击打开链接
题意:
思路:
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 1000000000000 typedef __int64 LL; const int N = 110; __int64 dis[N][N],place[N]; __int64 L1,L2,L3,L4,C1,C2,C3,C4; int n,m; LL judge(LL x) { if(x < 0) x *= -1; if(x > 0 && x <= L1) return C1; else if(x > L1 && x <= L2) return C2; else if(x > L2 && x <= L3) return C3; else if(x > L3 && x <= L4) return C4; else return INF; } void floyd() { for(int k=1; k<=n; k++) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(dis[i][j] > dis[i][k] + dis[k][j] && dis[i][k] != INF && dis[k][j] != INF) dis[i][j] = dis[i][k] + dis[k][j]; } } } } int main() { //freopen("input.txt","r",stdin); int t; int kase = 1; cin>>t; while(t--) { scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d%I64d",&L1,&L2,&L3,&L4,&C1,&C2,&C3,&C4); scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { scanf("%I64d",&place[i]); } for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { __int64 x = place[i] - place[j]; dis[i][j] = dis[j][i] = judge(x); } } floyd(); printf("Case %d:\n",kase++); for(int i=1; i<=m; i++) { int st,ed; scanf("%d%d",&st,&ed); if(dis[st][ed] != INF) printf("The minimum cost between station %d and station %d is %I64d.\n",st,ed,dis[st][ed]); else printf("Station %d and station %d are not attainable.\n",st,ed); } } return 0; }
----------------------------------------------------------
收获:
---------------------------------------------------------
战斗,从不退缩;奋斗,永不停歇~~~~~~~~~~~~~~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。