#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <cmath>
using namespace std;
const int MAX = 1000;
typedef struct point{
int x, y;
int flag;
}point;
point list[MAX];
int stack[MAX], top;
void swap(point &a, point &b){
point t;
t = a; a = b; b = t;
}
int CrossProd(point p0, point p1, point p2){
return (p1.x-p0.x)*(p2.y-p0.y) - (p1.y-p0.y)*(p2.x-p0.x);
}
int comp(const void *pp1, const void *pp2){
point *p1 = (point*)pp1, *p2 = (point*)pp2;
return CrossProd(list[0], *p1, *p2)*(-1);
}
int init(int n){
int i;
for(i = 0; i < n; i++){
cin >> list[i].x >> list[i].y;
list[i].flag = 1;
if((list[i].y < list[0].y)|| (list[i].y == list[0].y)
&& (list[i].x<list[0].x)){
swap(list[0], list[i]);
}
}
return n-1;
}
int main()
{
int count = 0, n, num;
while(cin>>n){
if(0 == n){
break;
}
count++;
cout << "set" << count << ":\n";
num = init(n);
qsort(list+1, num, sizeof(point), comp);
for(int i = 0; i < n; i++){
printf("list[%d] = %d, list[%d] = %d\n", i, list[i].x, i, list[i].y);
}
}
return 0;
}
极角排序(叉积)
最新推荐文章于 2022-04-22 19:51:42 发布