您的位置:首页 > 其它

POJ2349 prim算法

2016-01-31 15:15 260 查看
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double x[1001],y[1001],a[1001][1001],d[1001],p[1001],ans[10001],asd[10001];
int main(){
int i,j,k,m,n;
int t;
cin>>t;
int v=0;
for(int q=1;q<=t;q++){
int u=0;
cin>>m>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
a[i][j]=0;
}
for(i=1;i<=n;i++){
cin>>x[i]>>y[i];
p[i]=0;d[i]=10000000.0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
a[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
d[1]=0;
int min;
for(i=1;i<=n;i++){
min=1000000000.0;
for(j=1;j<=n;j++)
if(!p[j] && d[j]<min){
k=j;
min=d[j];
}
p[k]=1;
ans[++u]=d[k];
for(j=1;j<=n;j++)
if(!p[j] && a[i][j]!=0 && d[j]>a[j][k])
d[j]=a[j][k];
}
for(i=1;i<u;i++)
for(j=i+1;j<=u;j++){
if(ans[i]<ans[j]){
int tmp;
tmp=ans[i];ans[i]=ans[j];ans[j]=tmp;
}
}
asd[++v]=ans[m];
for(i=1;i<=u;i++)ans[i]=0;
}
for(i=1;i<=t;i++){
cout<<asd[i]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: