最短路Flord:kuangbin系列之最短路B

题目传送门:Frogger

利用了Flord算法:算法讲解参考:福利

题目大意,在两个石头之间找到最短路径

#include <iostream>
#include<stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <iomanip>
using namespace std;
#define MAX 210
pair<int ,int >p[MAX];

double dis(pair<int,int>p1,pair<int,int>p2)//预处理将坐标转化为距离;
{
    return sqrt((p1.first-p2.first)*(p1.first-p2.first)+(p2.second-p1.second)*(p2.second-p1.second));
}
double dist[MAX][MAX];
int main()
{
    int N;
    int x,y;
    int Case=0;
    while(cin>>N,N)
    {
            ++Case;
            cout<<"Scenario #"<<Case<<endl;
            for(int i=0;i<N;i++)
            {
                 cin>>x>>y;
                p[i]=make_pair(x,y);
            }
            for(int i=0;i<N;i++)
            {
                for(int j=1;i<N;i++)
                    if(i==j)dist[i][j]=dis(p[i],p[j]);
                else dist[i][j]=dist[j][i]=dis(p[i],p[j]);
            }
            cout<<"Frog Distance = ";
            /******Flord核心********/
           for(int k=0;k<N;k++)
            for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
            if(dist[i][j]>dist[i][k]+dist[k][j])
            dist[i][j]=dist[i][k]+dist[k][j];
           cout<<setiosflags(ios::fixed)<<setprecision(3)<<dist[0][1]<<endl<<endl;//每个实例中间隔了一行,wa了好久
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/guagua_de_xiaohai/article/details/80575481