HDU 1007题目求救 老是Runtime Error (STACK_OVERFLOW)
附代码:求大神赐教 貌似递归写的不好 估计20的规模就会崩 无语了
#include<stdio.h>
#include<math.h>
#define SIZE 100100
typedef struct cor_x_y{
double cor_x[SIZE];
double cor_y[SIZE];
}cor;
cor xy;
int q,w;
void swap(double *a,double *b){
double s;
q=a-xy.cor_x;
w=b-xy.cor_x;
s=xy.cor_x[q];
xy.cor_x[q]=xy.cor_x[w];
xy.cor_x[w]=s;
s=xy.cor_y[q];
xy.cor_y[q]=xy.cor_y[w];
xy.cor_y[w]=s;
}
double *split (double *head , double *tail)
{
double middle = *(head + (tail - head) / 2);
while (1)
{
while (*head < middle)
head++;
tail--;
while (*tail > middle)
tail--;
if (head >= tail)
return head;
swap (head , tail);
head++;
}
}
//快速排序 , 递归调用
void QuickSort(double * first , double *last)
{
if (last > first+1)
{
double *t=split(first, last);
if (last -t < t - first)
{
QuickSort(t, last);
QuickSort(first , t);
}
else
{
QuickSort(first , t);
QuickSort(t, last);
}
}
}
double div_meg(cor xy,int i,int j){
int mid=(int)(i+j)/2;
double m,mm,b;
if(i>=j){
return -1;
}
m=div_meg(xy,i,mid);
mm=div_meg(xy,mid+1,j);
b=(xy.cor_x[mid]-xy.cor_x[mid+1])*(xy.cor_x[mid]-xy.cor_x[mid+1])+(xy.cor_y[mid]-xy.cor_y[mid+1])*(xy.cor_y[mid]-xy.cor_y[mid+1]);
if(m<0&&mm>=0){
if(mm>b)
return b;
else
return mm;
}
if(m>=0&&mm<0){
if(m>b)
return b;
else
return m;
}
if(m<0&&mm<0){
return b;
}
if(m>=0&&mm>=0){
if(mm>b){
if(b>m){
return m;
}else{
return b;
}
}else{
if(m>mm){
return mm;
}else{
return m;
}
}
}
}
int main(){
int n,i;
scanf("%d",&n);
while(n){
for(i=0;i<n;i++){
scanf("%lf",&xy.cor_x[i]);
scanf("%lf",&xy.cor_y[i]);
}
QuickSort(xy.cor_x,xy.cor_x+n);
printf("%.2lf\n",sqrt(div_meg(xy,0,n-1))/2);
scanf("%d",&n);
}
return 0;
}