1853 圆组

题目描述

给出n个圆的圆心和半径,相交的圆算在同一组中,如圆1和圆2和圆3相交,则圆1,2,3在同一组中。求总共有几组圆。

输入

多组输入,第一行输入n,表示有n(0<=n<=1000)个圆,接下来n行,每行输入 圆心坐标 x,y,半径r (都是int型)

输出

对每组输入输出总共圆的组数

样例输入

<span style="color:#333333"><span style="color:#333333">4
2 0 1
0 2 1
-2 0 1
0 -2 1</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">4</span></span>
import java.text.DecimalFormat;
import java.util.*;
public class Main {
    static int []F=new int[1010];
    public static  void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int n=cin.nextInt();
        G []g=new G[n];
        for(int i=0;i<n;i++){
            int x=cin.nextInt();
            int y=cin.nextInt();
            int r=cin.nextInt();
            g[i]=new G(x,y,r);
        }
        for(int i=0;i<F.length;i++){
            F[i]=i;
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(charge(g[i],g[j])&&i!=j){
                    union(i,j);

                }
            }
        }
        int count=0;
        for(int i=0;i<n;i++){
            if(F[i]==i){
                count++;
            }
        }
        System.out.println(count);

        cin.close();
    }

    private static void union(int a, int b) {
        int fa=find(a);
        int fb=find(b);
        if(a!=b){
            F[fb]=fa;
        }
    }

    private static int find(int a) {
        return a==F[a]? a:(F[a]=find(F[a]));

    }

    private static boolean charge(G a, G b) {
        return dis(a,b)<(a.r+b.r);
    }
    private static double dis(G a, G b) {
        double s=Math.sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
        return s;
    }

    private static class G {
        int x;
        int y;
        int r;
        public G(int x,int y,int r){
            this.x=x;
            this.y=y;
            this.r=r;
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值