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


 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 }

 


 

posted @ 2017-08-13 14:57  Hammer_cwz_77  阅读(245)  评论(0编辑  收藏  举报