【 P1744 采购特价商品】floyed求最短路
https://www.luogu.org/problemnew/show/P1744


分析:求最短路,且n的值比较小,故选择 floyed.
根据样例做题如下:

#include<iostream> #include<cmath> #include<cstdio> using namespace std; double f[110][110],x[110],y[110]; int a,b,n,m,s,t; int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=99999;//初始化邻接矩阵,初始全不连通 for(int i=1;i<=n;i++) cin>>x[i]>>y[i];//读入i点坐标 cin>>m; for(int i=1;i<=m;i++) { cin>>a>>b; //一边存相邻关系,一边计算出两点间距离 f[a][b]=f[b][a]=sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));//两点之间距离公式 } cin>>s>>t; for(int k=1;k<=n;k++) //弗洛伊德— 求出各个点之间的最短路径 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); printf("%.2lf\n",f[s][t]); //输出答案 //f[][]中存放了任意2点的最短路径 return 0; }
浙公网安备 33010602011771号