rt,题目,代码如下,主函数内的不用看,只要看 Ford 函数里的代码就好了。悬赏关注。
#include <bits/stdc++.h>
using namespace std;
int n,m,x[10001],y[10001],a[10001],b[10001],start,en;
double s[10001][10001],ans[10001];
void Bellman_Ford(){
ans[start]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int u=a[j],v=b[j];
double w=s[v][u];
if(ans[u]==1e9){
continue;
}
if(ans[v]>ans[u]+w){
ans[v]=ans[u]+w;
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
s[i][j]=1e9;
}
ans[i]=1e9;
}
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>a[i]>>b[i];
s[a[i]][b[i]]=s[b[i]][a[i]]=sqrt(pow(abs(x[a[i]]-x[b[i]]),2)+pow(abs(y[a[i]]-y[b[i]]),2));
}
cin>>start>>en;
Bellman_Ford();
printf("%.2lf",ans[en]);
return 0;
}