ZOJ 1891 Subway (dijkstra)
2010-07-30 20:07
330 查看
从家走到学校,怎样时间最短?
有两种行进方式,走路,坐地铁,他们的速度不一样(注意在运算的时候要变换单位,题目求的时间是分钟,而且题目给的坐标是以米为单位,不是千米)。给出几条地铁线路和他们的节点,相邻节点之间肯定做地铁,然后把走路的路线弄出来,非地铁路线均是走路路线。。。。然后dijkstra。。。就OK了、
有两种行进方式,走路,坐地铁,他们的速度不一样(注意在运算的时候要变换单位,题目求的时间是分钟,而且题目给的坐标是以米为单位,不是千米)。给出几条地铁线路和他们的节点,相邻节点之间肯定做地铁,然后把走路的路线弄出来,非地铁路线均是走路路线。。。。然后dijkstra。。。就OK了、
#include<stdio.h> #include<math.h> #include<string.h> struct point { double x; double y; }home,temp,shul,pre,points[210]; const double INF = 10e10; int main(void) { double mat[210][210]; int a,flag[210]; double dist[210],min; int start,i,now,j; while(scanf("%lf%lf%lf%lf",&home.x,&home.y,&shul.x,&shul.y)!=EOF) { points[1]=home; points[2]=shul; start=2; for(i=1;i<210;i++) for(j=1;j<210;j++) mat[i][j]=mat[j][i]=INF; memset(flag,0,sizeof(flag)); for(i=1;i<210;i++) dist[i]=INF; while(scanf("%lf%lf",&temp.x,&temp.y)) { if(temp.x+1<=10e-8 && temp.y+1<=10e-8) break; points[++start] = pre = temp; while(scanf("%lf%lf",&temp.x,&temp.y)) { if(temp.x+1<=10e-8&& temp.y+1<=10e-8) break; points[++start]=temp; mat[start-1][start]=mat[start][start-1] =sqrt((pre.x-temp.x)*(pre.x-temp.x)+(pre.y-temp.y)*(pre.y-temp.y))*3/2000; pre=temp; } } for(i=1;i<=start;i++)//所有可能的边罗列出来,把除了地铁的全部弄成走路的 for(j=1;j<=start;j++) { if(i==j) continue; if(fabs(mat[i][j]-INF)<=10e-8) { mat[i][j]=mat[j][i]= sqrt((points[i].x-points[j].x)*(points[i].x-points[j].x)+ (points[i].y-points[j].y)*(points[i].y-points[j].y))*3/500; } } now=1;dist[1]=0;flag[1]=1;//dijkstra求解过程。。一般都能写出来。。 for(i=1;i<start;i++) { for(j=1;j<=start;j++) if(flag[j] ==0 && dist[j] > dist[now] + mat[now][j]) dist[j] = dist[now] + mat[now][j]; for(j=1,min=INF;j<=start;j++) if(dist[j] < min && flag[j] == 0) {now=j;min=dist[j];} flag[now]=1; } a=(int)dist[2]; if(dist[2]-a>=0.5) a++; printf("%d/n",a); } return 0; }
相关文章推荐
- zoj 1891 - 传说中的简答题 - 最短路径 - dijkstra
- POJ 1135/ZOJ 1298 Domino Effect (最短路径dijkstra)
- ZOJ 1721 The Doors (计算几何+dijkstra)
- poj Subway(dijkstra)
- Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)
- ZOJ Highway Project(dijkstra&heap&邻接表)
- poj2502 subway dijkstra
- ZOJ 1082 dijkstra 最短路径
- ZOJ 2526 FatMouse and JavaBean II (dijkstra + 权值记录)
- poj Subway(dijkstra)
- Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)
- ZOJ 1655 Transport Goods 【最短路】【Dijkstra】
- ZOJ 1221 Risk(最短路径Dijkstra和Floyd算法)
- hdu1546 zoj 2750 Idiomatic Phrases Game (dijkstra)
- ZOJ 1456 Minimum Transport Cost (dijkstra+dfs)
- poj Subway(dijkstra)
- CSU 1891: Full Tank?(dijkstra+priority_queue or dp?)
- poj Subway(dijkstra)
- POJ ~ 2502 ~ Subway (Dijkstra + 建图)
- poj Subway(dijkstra)