1.抓住问题的性质来枚举

2.注意STLbitset用法,bitset bts 可以用来模仿存放两个元素之间关系的二维信息图,也可进行位运算等操作

#include <bits/stdc++.h>
using namespace std;
int n,m=0;
int x[4000],y[4000];
struct ty{
	int dis;//dis存x,y两点距离的平方 
	int x,y;
}a[3000*3000]; //大小大于Cn2  3000*2999/2
bitset<4000> b[4000]; ////bitset bts 用来模仿存放坐标的地图 
double dist(int i,int j)
{
	return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
}
bool cmp(ty a,ty b)
{
	return a.dis>b.dis?true:false;
}
int main(void)
{
	int m=1;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d%d",&x[i],&y[i]);
	for (int i=1;i<=n;i++)  //复杂度跟Cn2一样  
	{
		for (int j=i+1;j<=n;j++)
		{
			++m;
			a[m].dis=dist(i,j);
			a[m].x=i;
			a[m].y=j;
		}
	}
	sort(a+1,a+m+1,cmp);
	for (int i=1;i<=m;i++)
	{
		if( (b[a[i].x] & b[a[i].y]) != 0) //如果枚举到的这条边a[i]的两个顶点a[i].x和a[i].y有公共点,(连向同一个点) ,注意有位运算的判断要加括号!!,不加编译报错 
		{
			printf("%.8f",sqrt(a[i].dis)/2.0);
			break;
		}
		else //否则标记x连上了y,y也连上了x 
		{
			b[a[i].x][a[i].y]=1;
			b[a[i].y][a[i].x]=1;
		}
	}
}