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\nFrog Distance = %.3lf\n\n", ++Case, map[0][1]);
}
return 0;
}
浙公网安备 33010602011771号