hdu 1007

题目大意:输入n不为0时,表示接受n个点的坐标,求这些坐标之间最小距离。

本来是把数组放在主函数里面的,结果是Runtime Error(STACK_OVERFLOW)  (貌似是数组太大,空间不够的意思)。把数组降低,结果是Runtime Error(ACCESS_VIOLATION)。烦的要死,难道就只能用c++的排序?c++的vector倒是非常好用,能够动态改变大小,c语言就没有类似的么?有知道的大神告知下的么?

非常郁闷的吃完午饭回来,顺手把数组设置为全局变量,然后~~~就过了。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct point
{
	double x;
	double y;
}point;

point coo[100001];

int cmp(const void*a,const void*b)
{
	point *c=(point *)a;
	point *d=(point *)b;
	if(c->y!=d->y)
		return c->y-d->y>0?1:-1;
	else
		return c->x-d->x>0?1:-1;
}

int main()
{
	int n,i,j;
	double len,temp;
	

	while(scanf("%d",&n)!=EOF&&n)
	{
		for(i=0;i<n;i++)
			scanf("%lf %lf",&coo[i].x,&coo[i].y);
		qsort(coo,n,sizeof(coo[0]),cmp);
		len=(coo[1].x-coo[0].x)*(coo[1].x-coo[0].x);
		len+=(coo[1].y-coo[0].y)*(coo[1].y-coo[0].y);
		for(i=0;i<n;i++)
		{
			for(j=i+1;j<n;j++)
			{
				if(coo[j].y-coo[i].y>=sqrt(len))
					break;
				temp=(coo[j].x-coo[i].x)*(coo[j].x-coo[i].x);
				temp+=(coo[j].y-coo[i].y)*(coo[j].y-coo[i].y);
				if(temp<len)
					len=temp;
			}
		}
		printf("%.2f\n",sqrt(len)/2);
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值