爬山算法
大体思路
爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶
具体操作
把当前的节点和要走的节点的值进行比较。 如果当前节点是最大的,那么不进行操作;反之就用要走的的节点来替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。
缺点
会陷入局部最优解。只适用于计算几何等局部最优解集中的题目。
#include
#include
using namespace std;
#define maxn 105
int n,go[4][2]={ {1,0},{-1,0},{0,1},{0,-1}};
double x[maxn],y[maxn],sx,sy;
double calc(double x1,double y1){
double ans=0;
for(int i=0;i
ans+=sqrt((x1-x[i])*(x1-x[i])+(y1-y[i])*(y1-y[i]));
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=0;i
scanf("%lf%lf",x+i,y+i),sx+=x[i],sy+=y[i];
}
sx/=n,sy/=n;
double ans=calc(sx,sy),x1,y1,k;
fo