poj 2502最短路subway
2016-05-26 11:39
501 查看
题目大体意思:
有一个人要去学校,一共有两种出行方式。
分别是:1.走路10km/h
2.坐地铁40km/h
已知 家、地铁站、学校的坐标。
求最短时间
这道题的大体方法是dijkstra,先求出他在个路段的时间注意要化成米,在裸dijkstra,要注意d和ans数组要定义成double。
有一个人要去学校,一共有两种出行方式。
分别是:1.走路10km/h
2.坐地铁40km/h
已知 家、地铁站、学校的坐标。
求最短时间
这道题的大体方法是dijkstra,先求出他在个路段的时间注意要化成米,在裸dijkstra,要注意d和ans数组要定义成double。
# include<stdio.h> # include<stdlib.h> # include<math.h>//应为要用sqrt所以要开math double d[1010][1010],ans[1000000],t[10000],x[10000],y[10000]; char s[10000]; int main(){ int n,i,j,k,l=1,sum=0,x1,x2,y1,y2,b,c,s=0; double m,o; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//读入学校坐标和家坐标 x[1]=x1; y[1]=y1; while(scanf("%d%d",&b,&c)!=EOF){ if(b==-1 && c==-1){ s=0; continue; } x[++l]=b; y[l]=c; if(s==1){ d[l][l-1]=sqrt((x[l]-x[l-1])*(x[l]-x[l-1])+(y[l]-y[l-1])*(y[l]-y[l-1]))*60.0/40000.0;//求地铁时间 d[l-1][l]=d[l][l-1]; } s=1; } x[++l]=x2;y[l]=y2; for(i=1;i<=l;i++) for(j=1;j<=l;j++){ m=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))*60.0/10000.0;//步行时间 if(!d[i][j])d[i][j]=m; else{ d[i][j]=m<d[i][j]?m:d[i][j]; } } for(i=1;i<=l;i++)ans[i]=1000000000.0;//裸dijkstra ans[1]=0; for(i=1;i<=l;i++){ o=1000000000.0; for(j=1;j<=l;j++){ if(!t[j]&&ans[j]<o){ o=ans[j]; k=j; } } t[k]=1; for(j=1;j<=l;j++){ if(!t[j] && d[k][j] && ans[j]>ans[k]+d[k][j]){ ans[j]=ans[k]+d[k][j]; } } } sum=(int)(ans[l]+0.5);//四舍五入 printf("%d\n",sum); return 0; }
相关文章推荐
- 基于Java实现的Dijkstra算法示例
- Dijkstra和floyd——求单源点最短路径
- 初学图论-Dijkstra单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1001
- POJ ACM 1002
- 1611:The Suspects
- POJ1089 区间合并
- Dijkstra算法的粗略学习
- POJ 2159 Ancient Cipher
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover