Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
42496 | 陈万瑄 | 最短路径问题 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 897 | 2022-06-30 21:24:47 |
#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; }