码迷,mamicode.com
首页 > 其他好文 > 详细

最短路径问题(dijkstra-模板)

时间:2017-08-13 16:22:00      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:e30   路径问题   std   class   names   bre   ++   using   break   


 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[101][3];
 4 double c[101];
 5 bool b[101];
 6 double f[101][101];
 7 int n,x,y,s,m,e;
 8 int k;
 9 double minn ;
10 double maxx=1e30;
11 int main()
12 {
13 cin>>n;
14 for(int i=1;i<=n;i++)
15 cin>>a[i][1]>>a[i][2];
16 for(int i=1;i<=n;i++)
17 for(int j=1;j<=n;j++)
18 {
19 f[i][j]=maxx;    
20 }
21 cin>>m;
22 for(int i=1;i<=m;i++)
23 {
24     cin>>x>>y;
25     f[x][y]=f[y][x]=sqrt(pow(double(a[x][1]-a[y][1]),2)+pow(double(a[x][2]-a[y][2]),2));
26 }
27 cin>>s>>e;
28 for(int i=1;i<=n;i++)
29 c[i]=f[s][i];
30 memset(b,false,sizeof(b));
31 b[s]=true;
32 c[s]=0;
33 for(int i=0;i<=n-1;i++)
34 {minn=maxx;
35 k=0;
36 for(int j=1;j<=n;j++)
37 if((!b[j])&&(c[j]<minn))
38     {
39         minn=c[j];
40         k=j;
41     }
42 if(k==0)    
43     break;
44 b[k]=true;
45 for(int j=1;j<=n;j++)
46 if(c[k]+f[k][j]<c[j])
47 c[j]=c[k]+f[k][j];
48 }    
49 printf("%.2lf\n",c[e]);
50     return 0;
51 }

 


 

最短路径问题(dijkstra-模板)

标签:e30   路径问题   std   class   names   bre   ++   using   break   

原文地址:http://www.cnblogs.com/Hammer-cwz-77/p/7353528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!