提交时间:2022-06-30 21:24:47

运行 ID: 42496

#include<bits/stdc++.h> using namespace std; const int M=101,N=201; struct{ int x,y; }p[M]; int n,m,s,tt; int h[M],e[N],ne[N],idx; double w[N]; double dis[M]; bool state[M]; void add(int a,int b,double c){ idx++,e[idx]=b,ne[idx]=h[a],h[a]=idx,w[idx]=c; } void Dijkstra(){ dis[s]=0; for(int i=1;i<=n;i++){ int t=-1; for(int j=1;j<=n;j++){ if(!state[j]&&(t==-1||dis[j]<dis[t])) t=j; } state[t]=1; for(int j=h[t];j!=-1;j=ne[j]){ int v=e[j]; dis[v]=min(dis[v],dis[t]+w[j]); } } } int main(){ memset(h,-1,sizeof(h)); cin>>n; for(int i=1;i<=n;i++){ cin>>p[i].x>>p[i].y; dis[i]=INF; } cin>>m; while(m--){ int a,b; double c; cin>>a>>b; c=sqrt(pow(p[a].x-p[b].x,2)+pow(p[a].y-p[b].y,2)); add(a,b,c),add(b,a,c); } cin>>s>>tt; Dijkstra(); if(dis[tt]>INF/2) cout<<-1; else printf("%.2lf",dis[tt]); return 0; }