poj2031 kruskal

简介: http://poj.org/problem?id=2031 #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> using namespace std; double a[101][4]; double esp = 0.0000001;

http://poj.org/problem?id=2031

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
double a[101][4];
double esp = 0.0000001;
struct edge
{
    int u,v;
    double w;
} e[5000];
int tree[101];
int cmp( const void *a ,const void *b)
{
    return (*(edge *)a).w > (*(edge *)b).w ? 1 : -1 ;
}
int main()
{
    int n;
    //freopen("1.txt","r",stdin);
    while (cin>>n,n)
    {
        int i,j;
        for (i = 0; i < n; ++i)
            cin >> a[i][0] >> a[i][1] >> a[i][2] >> a[i][3];
        int k = 0;
        for (i = 0; i < n-1; ++i)
            for (j = i+1; j < n; ++j)
            {
                e[k].u = i;
                e[k].v = j;
                double temp = sqrt( (a[i][0]-a[j][0])*(a[i][0]-a[j][0])
                                    +(a[i][1]-a[j][1])*(a[i][1]-a[j][1])
                                    +(a[i][2]-a[j][2])*(a[i][2]-a[j][2]) )- a[i][3] - a[j][3];
                if (temp < esp)
                    e[k].w = 0;
                else
                    e[k].w = temp;
                ++k;
            }
        qsort(e,k,sizeof(e[0]),cmp);
        for (i = 0; i < n; ++i)
            tree[i] = i;
        double total = 0;
        for (i = 0; i < k; ++i)
        {
            int m1 = tree[e[i].u];
            int m2 = tree[e[i].v];
            if (m1 != m2)
            {
                total += e[i].w;
                for (j = 0; j < n; ++j)
                    if (tree[j] == m2)
                        tree[j] = m1;
            }
        }
        printf("%.3f\n",total);
    }
    return 0;
}

  

目录
相关文章
|
存储 算法
Kruskal
复习acwing算法基础课的内容,本篇为讲解基础算法:Kruskal,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
114 0
Kruskal
|
人工智能
poj2421 kruskal
http://poj.org/problem?id=2421 #include&lt;algorithm&gt; #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; using namespace std; int n; struct ed
1005 0
|
人工智能
poj1861 kruskal
http://poj.org/problem?id=1861 #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cstdlib&gt; using namespace std; #define maxn 1001 #define maxm 15001 struct edge { int u,v
1285 0
poj 1251 kruskal
http://poj.org/problem?id=1251 #include&lt;algorithm&gt; #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; using namespace std; #define maxm 205
1179 0

热门文章

最新文章