poj 2502 Subway dijkstra基础 !!!!入门题
2011-11-22 17:13
239 查看
这是我第一个dijkstra,之前接触过,但不知道这个算法,现在一看,还是不难的,关键就是不断更新d[]数组,使d[]数组里面放的一直是
所有点到起点的最小值,还有vis[]数组来避免重复查找!!!!!!!!!!
#include<iostream> using namespace std; #include<algorithm> #include<math.h> struct node { double x; double y; }a[205]; int vis[205]; double d[205]; double map[205][205]; int main() { while(cin>>a[0].x>>a[0].y>>a[1].x>>a[1].y) { memset(map,0.0,sizeof(map)); int n=2; int sign=0; while(scanf("%lf%lf",&a .x,&a .y)!=EOF) { if(a .x==-1&&a .y==-1) { sign=0; //这个sign很有用,我已开始把输入方式看错了,一行的第一站和上一行的最后一站不是联通的 continue; } if(sign==1) map [n-1]=map[n-1] =(sqrt((a .x-a[n-1].x)*(a .x-a[n-1].x)+(a .y-a[n-1].y)*(a .y-a[n-1].y)))/40000.0 ; n++; sign=1; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(map[i][j]==0) { map[i][j]=map[j][i]=(sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)))/10000.0; if(i==j) map[i][j]=10000000.0; } } }//以下就是dijkstra的过程了 memset(vis,0,sizeof(vis)); vis[0]=1; for(int i=0;i<n;i++) d[i]=map[0][i]; // for(int i=0;i<n;i++) // cout<<d[i]<<' '; // system("pause"); double max=10000000.0; for(int i=1;i<n;i++) { double temp=max; int u; for(int j=1;j<n;j++) if(!vis[j]&&d[j]<temp) { temp=d[j]; u=j; } vis[u]=1; for(int j=0;j<n;j++) { if(!vis[j]) if(d[j]>map[u][j]+d[u]) d[j]=map[u][j]+d[u]; } } double ans=60.0*d[1]; printf("%0.lf\n",ans); } return 0; }
相关文章推荐
- poj 1502 MPI Maelstrom dijkstra基础 入门 点型模板题
- (简单) POJ 2502 Subway,Dijkstra。
- POJ 2502 Subway (Dijkstra 最短路+建图)
- Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)
- POJ ~ 2502 ~ Subway (Dijkstra + 建图)
- Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)
- Dijkstra-POJ-2502-Subway
- poj 2502 Subway(dijkstra 最短路)
- POJ2502 subway(dijkstra以最短时间代替最短路)
- POJ 2502 Subway (Dijkstra 最短+建设规划)
- poj2502 - Subway (dijkstra )(L)
- poj 3268 Silver Cow Party dijkstra基础题!!!入门
- POJ 2502 Subway 【最短路之建图为关键】
- POJ-2502-Subway
- poj 2502 Subway
- [POJ 2502]Subway[最短路]
- POJ - 2502 Subway
- POJ 2502 Subway (最短路)
- POJ-2502 Subway( 最短路 )
- POJ - 2502 SUBWAY(FLOYD算法求解最短路)