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 }
时间: 2024-10-12 14:45:22