Froggers

这个,我连题目都没读懂,但是听说是最小生成树,我也不是很清楚,所以直接贴代码,感谢大神

#include <iostream>  
#include <cmath>  
using namespace std;  
double map[210][210];  
int n;  
struct Stone  
{  
    int x, y;  
}s[210];  
void Floyd()  
{  
    int i,j,k;  
    for(k=0; k<n; k++)  
    for(i=0; i<n-1; i++)  
    for(j=i+1; j<n; j++)  
    {  
        if(map[i][j]>map[i][k] && map[i][j]>map[k][j])  
        {  
            if(map[i][k]>map[k][j])  
                map[j][i]=map[i][j] = map[i][k];  
            else   
                map[j][i]=map[i][j] = map[k][j];  
        }  
    }  
}  
double getdis(int a, int b)  
{  
    return sqrt((double)(s[a].x-s[b].x)*(s[a].x-s[b].x)+(double)(s[a].y-s[b].y)*(s[a].y-s[b].y));  
}  
int main()  
{  
    int Case=0,i,j;  
    while(scanf("%d", &n), n)  
    {  
        for(i=0; i<n; i++)  
            scanf("%d %d", &s[i].x, &s[i].y);  
        for(i=0; i<n; i++)  
        for(j=i+1; j<n; j++)  
        {  
            map[i][j]=map[j][i]=getdis(i,j);  
        }  
        Floyd();  
        printf("Scenario #%d
Frog Distance = %.3lf

", ++Case, map[0][1]);  
    }  
    return 0;  
}  


 
 

  

原文地址:https://www.cnblogs.com/yintoki/p/5714062.html