【 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; 
}

 

posted on 2018-12-20 10:48  lcdxjsj  阅读(105)  评论(0)    收藏  举报

导航