Untitled
raw download clone
TEXT
views 37
,
size 1709 b
#include<stdio.h>

long long int dis[1009][1009];
long long int x[1009];
long long int y[1009];
int visited[1009];
int type[1009];
int n,r;
int k;
void dfs(int now,int k)  
{
    int i;

    visited[now]=k;   //visited 做分類

    for(i=0; i<n; i++)
    {
        if (visited[i]!=0)
            continue;
        else if(dis[now][i]<=r*r)
        {

            dfs(i,k);

        }


    }



    return ;
}



int main()
{
    int t;
    int p;
    int i,j;
    int check=0;
    int ans=0;

    scanf("%d",&t);
    for(p=0; p<t; p++)
    {
        scanf("%d%d%d",&n,&r,&k);
        for(i=0; i<n; i++)
        {
            scanf("%lld%lld",&x[i],&y[i]);
        }
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                dis[i][j]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);

            }
        }

        for(i=0; i<n; i++)
        {
            if(visited[i]==0)
            {
                ans++;
                dfs(i,ans);  //組別號碼


            }
        }

//for(i=0;i<n;i++)printf("%d ",visited[i]);  //
//printf("\n");                              //

        for(i=0; i<n; i++)
        {

            type[visited[i]]++;  //紀錄group數量
        }
        for(i=0; i<n; i++)
        {
//printf("%d ",type[i]);     //

            if(type[i]<k&&type[i]!=0) //檢查組別裡面的個數是否小於k
                check++;

        }
//printf("\n");              //
        printf("%d %d\n",check,ans-check);


        ans=0;
        check=0;
        memset(visited,0,1009);
        memset(type,0,1009);

    }


    return 0;
}
close fullscreen
Login or Register to edit or fork this paste. It's free.