ZOJ 2928 模拟退火 求三维费马点

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define eps 1e-12
#define N 110
#define M 2001000
#define ll long long
#define inf 0x3f3f3f3f

int n,cnt;
struct P
{
	double x,y,z;
	P(){}
	P(double _x,double _y,double _z)
		:x(_x),y(_y),z(_z){}
	double len()
	{
		return sqrt(x*x+y*y+z*z);
	}
	P operator+(const P p)
	{
		return P(x+p.x,y+p.y,z+p.z);
	}
	P operator-(const P p)
	{
		return P(x-p.x,y-p.y,z-p.z);
	}
	P operator*(double c)
	{
		return P(x*c,y*c,z*c);
	}

}p[N],dir[30];
int dblcmp(double x)
{
	return (x>eps)-(x<-eps);
}
void init()
{
	for(int i=-1;i<=1;i++)
		for(int j=-1;j<=1;j++)
			for(int k=-1;k<=1;k++)
				dir[cnt++] = P(i,j,k);

}
void solve()
{
	double step = 100;
	double mi = 1e10;
	P ans = P(0,0,0),now,nxt;
	for(int j=0;jeps)
	{
		nxt = ans;
		for(int i=0;i

你可能感兴趣的:(ACM,zoj,模拟退火)