POJ1696-凸包

题目:题目链接

 

题意:找逆时针螺旋线最多能连几个点

 

分析:贪心使用一些几何上的极角排序,凸包的应用,每次都连最外面的点即可。每次找到一个当前点curp,除了第一

次是对数组按纵坐标排序得出外,剩下的均按极角排序。使用一个ans数组记录链接的每一个点:

 

代码:

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b) 0)
        return true;
    else if(res < 0)
        return false;
    else
    {
        double dis1 = dis(a, curp);
        double dis2 = dis(b, curp);
        if(dis1 < dis2)
            return true;
        else
            return false;
    }
}

Point point[55];
int main()
{
    int M;
    scanf("%d", &M);
    int n;
    while(M--)
    {
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)
            scanf("%d%d%d", &point[i].index, &point[i].x, &point[i].y);
        sort(point, point+n, CmpByy);
        curp = point[0];
        int ans[1000];
        mem(ans, 0);
        int cnt = 0;
        int pos = 0;
        ans[pos++] = curp.index;
        //cout << " " << curp.index ;
        for(int i = 1; i < n; i++)
        {
            sort(point+i,point+n,CmpBYAngle);
            curp = point[i];
            ans[pos++] = curp.index;
            cnt++;
            //cout << " " << curp.index;
        }
        printf("%d", pos);
        for(int i = 0; i < pos; ++i)
            printf(" %d", ans[i]);
        printf("\n");

    }
    return 0;
}



 

 

 

你可能感兴趣的:(POJ,几何)