zoukankan      html  css  js  c++  java
  • 最小生成树prim算法 POJ2031

    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<ctype.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<limits.h>
    #include<queue>
    #include<stack>
    using namespace std;
    #define INF 0xfffffff
    #define max(a, b) a>b?a:b;
    #define min(a, b) a<b?a:b;
    const int N=110;
    struct node
    {
        double x, y, z, r;
    } maps[N];
    int visit[N];
    double p[N][N], dist[N];
    double solve(node a, node b)
    {
        double s, d;
        d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));
        s=d-a.r-b.r;
        if(s<0)
            s=0.000;
        return s;
    }
    void prim(int n)
    {
        int i, j, index;
        double ans;
        for(i=0; i<n; i++)
            dist[i]=p[0][i];
        visit[0]=1;
        for(i=1; i<n; i++)
        {
            double Min=INF;
            for(j=0; j<n; j++)
            {
                if(!visit[j]&&dist[j]<Min)
                {
                    index=j;
                    Min=dist[j];
                }
            }
            ans+=Min;
            visit[index]=1;
            for(j=0; j<n; j++)
            {
                if(!visit[j]&&dist[j]>p[index][j])
                    dist[j]=p[index][j];
            }
        }
        printf("%.3lf
    ", ans);
    }
    int main()
    {
        int n, i, j;
        while(scanf("%d", &n), n)
        {
            memset(p, 0, sizeof(p));
            memset(visit, 0, sizeof(visit));
            memset(maps, 0, sizeof(maps));
            for(i=0; i<n; i++)
                scanf("%lf%lf%lf%lf", &maps[i].x, &maps[i].y, &maps[i].z, &maps[i].r);
            for(i=0; i<n; i++)
            {
                for(j=0; j<=i; j++)
                {
                    p[i][j]=p[j][i]=solve(maps[i], maps[j]);
                }
            }
            prim(n);
        }
        return 0;
    }
  • 相关阅读:
    【iOS】The identity used sign the executable is no longer valid.
    【iOS】iOS Error Domain=NSCocoaErrorDomain Code=3840 "未能完成操作。(“Cocoa”错误 3840。)"
    Exponentiation
    A+B Problem
    括号配对
    单调递增最长子序列
    Fibonacci数
    ASCII码排序
    基础练习 数的读法
    基础练习 Sine之舞
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4683462.html
Copyright © 2011-2022 走看看