根据样例画图为上. 求dis[1][5]
#include<cstdio> #include<cmath> #include<iostream> #include<cstring> using namespace std; int a[101][3]; double f[101][101]; //floyed存储了 任意2点间最短路 int n,i,j,k,x,y,m,s,e; int main() { //存到同一目录下面用文件的方式读入 freopen("short.in","r",stdin); freopen("short.out","w",stdout); cin>>n; for(i=1;i<=n;i++) cin>>a[i][1]>>a[i][2]; cin>>m; memset(f,0x7f,sizeof(f)); for(i=1;i<=m;i++) { cin>>x>>y; f[y][x]=f[x][y]=sqrt(pow(double(a[x][1]-a[y][1]),2)+pow(double(a[x][2]-a[y][2]),2)); } cin>>s>>e; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if((f[i][j]>f[i][k]+f[k][j])&&(i!=j)&&(i!=k)&&(j!=k)) f[i][j]=f[i][k]+f[k][j]; printf("%.2lf\n",f[s][e]); return 0; }