标签:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 30620 | Accepted: 9875 |
Description
Input
Output
Sample Input
2 0 0 3 4 3 17 4 19 4 18 5 0
Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
Source
//题意要去将所有的石头都连起来,求最大边
Ulm Local 1997#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define INF 100000000.0
using namespace std;
struct node
{
int x,y;
} point[300];
double chuli(node p1,node p2)
{
return pow((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y),1.0/2);
}
double Map[1200][1200];
double a[2000];
double low[2000];
int next[2000];
int n;
int Prim(int u0)
{
int i,j;
for(i=0; i<n; i++)
{
low[i]=Map[u0][i];
next[i]=u0;
}
next[u0]=-1;
double max=0.0;
for(i=0; i<n-1; i++)
{
double min=INF;
int v=-1;
for(j=0; j<n; j++)
{
if(next[j]!=-1&&low[j]<min)
{
min=low[j];
v=j;
}
}
if(min>max)
max=min; //本体的核心
if(a[v]<0.0000001) //
{
a[v]=max;
if(v==1)
break;
}
if(v!=-1)
{
next[v]=-1;
for(j=0; j<n; j++)
{
if(next[j]!=-1 &&Map[v][j]<low[j])
{
low[j]=Map[v][j];
next[j]=v;
}
}
}
}
printf("Frog Distance = %.3f\n",a[1]); //poj不支持 %lf
}
int main()
{
int Case=1;
while(~scanf("%d",&n))
{
if(n==0)
break;
for(int i=0; i<n; i++)
{
scanf("%d%d",&point[i].x,&point[i].y);
}
for(int i=0; i<n; i++)
a[i]=0.0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
Map[i][j]=chuli(point[i],point[j]);
}
printf("Scenario #%d\n",Case++);
Prim(0);
printf("\n");
//cout<<"*";
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/became_a_wolf/article/details/47775439