zoukankan      html  css  js  c++  java
  • 【POJ】[2031]Building a Space Station

    这里写图片描述

    给出球心的位置(x,y,z)和半径(r),如果两球相离,那么两球之间的距离是两球心间的距离减去两半径,否则两球之间的距离为0
    要求所有的点都相连并输出最小的距离和

    感觉就是3D版的
    【杭电】[1875]畅通工程再续
    不过好像比那个还简单些

    思路还是根据点求出来边长
    注意的是如果两圆不相离 那么距离为0
    相离了是两表面的最短距离
    记得两点距离减去半径

    英语还是硬伤啊……

    还有就是不知道为什么C++能过……
    G++好多都WA了……
    看算法……
    也暂时不考虑这个问题了

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    struct xyz {
        double x,y,z,r;
    } a[120];
    int main() {
        double dis[120];
        double e[120][120];
        bool flag[120];
        double inf=999999;
        int N;
        while(scanf("%d",&N),N) {
            for(int i=1; i<=N; i++) {
                dis[i]=inf;
                flag[i]=false;
            }
            for(int i=1; i<=N; i++) {
                for(int j=1; j<=N; j++) {
                    e[i][j]=inf;
                }
            }
            for(int i=1; i<=N; i++) {
                scanf("%lf %lf %lf %lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r);
                for(int j=1; j<=N; j++) {
                    if(i==j)
                        continue;
                    else {
                        double l=sqrt(pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2)+pow(a[i].z-a[j].z,2));
                        if(l>a[i].r+a[j].r) {
                            e[j][i]=e[i][j]=l-a[i].r-a[j].r;
                        } else {
                            e[j][i]=e[i][j]=0;
                        }
                    }
                }
            }
            double sum=0;
            dis[1]=0;
            while(true) {
                int v=-1;
                for(int u=1; u<=N; u++) {
                    if(!flag[u]&&(v==-1||dis[u]<dis[v]))
                        v=u;
                }
                if(v==-1)
                    break;
                flag[v]=true;
                sum+=dis[v];
                for(int u=1; u<=N; u++) {
                    dis[u]=min(dis[u],e[v][u]);
                }
            }
            printf("%.3lf
    ",sum);
        }
        return 0;
    }
    

    题目地址:【POJ】[2031]Building a Space Station

  • 相关阅读:
    Linux内核从原理到代码详解
    linux内核研究-8-块设备I/O层
    《Linux内核分析》课程总结
    Nginx 重写规则指南1
    Nginx初探
    Nginx源码分析:3张图看懂启动及进程工作原理
    nginx源码分析 +redis的那些事儿
    I/O 模型及其设计模式
    高并发性能调试经验分享
    myawr
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569767.html
Copyright © 2011-2022 走看看