double closestpair(ArrayList<Point> Px,ArrayList<Point> Py) { if (Px.size()<=12){ double closest=Double.MAX_VALUE; for(int i=0;i<Px.size();i++){ for(int j=i+1;j<Px.size();j++){ closest=Math.min(distance(Px.get(i), Px.get(j)),closest); } } return closest; } double x=Px.get(Px.size()/2).x; ArrayList<Point> Lx=new ArrayList<Point>(); ArrayList<Point> Ly=new ArrayList<Point>(); ArrayList<Point> Rx=new ArrayList<Point>(); ArrayList<Point> Ry=new ArrayList<Point>(); for(Point p: Px){ if (p.x<x) Lx.add(p); else Rx.add(p); } for(Point p: Py){ if (p.x<x) Ly.add(p); else Ry.add(p); } double d1=closestpair(Lx,Ly); double d2=closestpair(Rx,Ry); double delta=Math.min(d1,d2); double split=closestsplitpair(Px,Py,delta,x); return Math.min(delta, split); }
struct PointPair closestpair(struct Point p[],int n) { if(n<=3) return brute(p,n); int mid=n/2; struct Point midp=p[mid]; struct PointPair dl = closestpair(p,mid); struct PointPair dr = closestpair(p+mid,n-mid); struct PointPair d = minpp(dl,dr); struct Point strip[n]; int i=0,j = 0; for (i = 0; i < n; i++) if (abs(p[i].x - midp.x) < d.dist) strip[j] = p[i], j++; return minpp(d,stripClosest(strip,j,d)); }
void main() { printf("Enter positions (max 10) : "); int a[10]={0,0},i; for(i=0;i<10;i++) scanf("%d",&a[i]); Quicksort(a,0,9); closestpair(a,10); }
int main() { int n,i; scanf("%d",&n); struct Point parr[n]; for(i=0;i<n;i++) { parr[i].x=inp(); parr[i].y=inp(); parr[i].in=i; } qsort(parr,n,sizeof(struct Point),comX); struct PointPair mp=closestpair(parr,n); if(mp.in1>mp.in2){i=mp.in1;mp.in1=mp.in2;mp.in2=i;} printf("%Lf\n",mp.dist); return 0; }
void main() { int *v, n, i; printf("Digite o tamanho do vetor\n"); scanf("%d", &n); /* alocando espaco para vetor */ v = calloc(n, sizeof (int)); for (i = 0; i < n; i++) { printf("Digite o %d valor do vetor\n", i); scanf("%d", &v[i]); } quicksort(v, 0, n - 1); char stropc[] = "\n\n0 - Sair\n1 - Exibir o vetor ordenado\n2 - Closest Pair\n3 - Element uniqueness\n4 - Frequency distribution\n"; printf("%s", stropc); /* menu para o usuario escolher comando a ser executado */ int opc; scanf("%d", &opc); while (opc > 0) { switch (opc) { case 1: { imprimevetor(v, n); break; } case 2: { closestpair(v, n); break; } case 3: { elementuniqueness(v, n); break; } case 4: { frequencydistribution(v, n); break; } default:{ printf("\nOpcao invalida\n"); break; } } printf("%s", stropc); scanf("%d", &opc); } /* desalocando memoria */ free(v); v = NULL; return; }