题目地址:POJ 2420
今天在比赛遇到了这题。。于是现场学了一下模拟退火。。。。
这题是先初始化为一个点,然后不断趋近距离和最短的点。还是挺简单的。。
代码如下:
#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 const int INF=0x3f3f3f3f; int n; struct point { int x, y; }dian[200]; double dist(point a, point b) { return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)); } double juhe(point x) { int i; double z=0; for(i=0;i 0.2) { flag=1; while(flag) { flag=0; point now; now.x=st.x+step; now.y=st.y; s=juhe(now); if(d>s) { flag=1; d=s; ed=now; } now.x=st.x-step; now.y=st.y; s=juhe(now); if(d>s) { flag=1; d=s; ed=now; } now.x=st.x; now.y=st.y+step; s=juhe(now); if(d>s) { flag=1; d=s; ed=now; } now.x=st.x; now.y=st.y-step; s=juhe(now); if(d>s) { flag=1; d=s; ed=now; } if(flag) st=ed; } step/=2.0; } printf("%.0f\n",d); return 0; }