poj 2420 模拟退火法基础
/*
题意:给n个电脑,求一个点到这n个电脑的距离和最小。
模拟退火法:和poj1379的方法类似
因为坐标范围是0-10000
不妨把它看成是10000*10000的正方形来做
*/
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define inf 10000000000000
using namespace std;
#define N 110
#define eps 0.1
#define pi acos(-1.0)
struct node {
double x,y,dis;
}f[N],ff[N];
int n;
double dd,x,y;
double diss(double x,double y) {
double sum=0;
int i;
for(i=1;i<=n;i++)
sum=sum+sqrt((x-f[i].x)*(x-f[i].x)+(y-f[i].y)*(y-f[i].y));
return sum;
}
void slove() {
int i,j;
double xx,yy;
for(i=1;i<=20;i++) {
ff[i].x=rand()%10000*1.0+1;
ff[i].y=rand()%10000*1.0+1;
ff[i].dis=diss(ff[i].x,ff[i].y);
}
double T=10000.0*sqrt(2.0);
double rate=0.9;
while(T>eps) {
for(i=1;i<=20;i++)
for(j=1;j<=30;j++) {
double ran=(rand()%1000+1)/1000.0*pi*10;
xx=ff[i].x+cos(ran)*T;
yy=ff[i].y+sin(ran)*T;
double dis=diss(xx,yy);
if(xx<0.0||xx>10000.0||yy<0.0||yy>10000.0)continue;
if(dis<ff[i].dis)
ff[i].dis=dis;
}
T*=rate;
}
dd=inf;
for(i=1;i<=20;i++){
if(dd>ff[i].dis)
dd=ff[i].dis;
}
return ;
}
int main() {
int i;
while(scanf("%d",&n)!=EOF) {
x=inf;
y=-1;
for(i=1;i<=n;i++)
scanf("%lf%lf",&f[i].x,&f[i].y);
slove();
printf("%.0f\n",dd);
}
return 0;
}
poj 2420 模拟退火法基础的更多相关文章
- poj 2420(模拟退火)
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6066 Accepted: 285 ...
- POJ 1379 模拟退火
模拟退火算法,很久之前就写过一篇文章了.双倍经验题(POJ 2420) 题意: 在一个矩形区域内,求一个点的距离到所有点的距离最短的那个,最大. 这个题意,很像二分定义,但是毫无思路,也不能暴力枚举, ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
- python3--算法基础:二维数组转90度
python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...
随机推荐
- CSS3常用知识点
CSS3常用知识点 1 css3选择器 1.1 属性选择器 /* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/ .attr2 a[class~="kawa& ...
- golang——随机数(math/rand包与crypto/rand包)
1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...
- Python基础类型(一) int 整型
Python算术运算符 以下假设变量: a=10,b=20: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 ...
- 关于mfc添加热键
对于mfc的添加热键的文章已经有很多了,我这里就简单的说一下并且说一些可能出的错误 首先在资源文件中添加ACCELERATOR然后在资源文件下的RC中找到ACCELERATOR的节点,打开后可以发现一 ...
- 利用Openfiler配置基于文件系统的网络存储
一.Openfiler简介 Openfiler是一个操作系统,其提供基于文件的网络附加存储和基于块的存储区域网络功能. Openfiler支持的网络协议包括:NFS,SMB/CIFS,HTTP/Web ...
- C# 相关概念
解决方案 在磁盘上由 .sln 文件表示,是一个或多个相关项目的容器. 例如,如果为 Python 应用程序编写 C++ 扩展,该 C++ 项目可以驻留在同一解决方案中. 解决方案还可以包含 Web ...
- Silverlight环境配置
今天对Silverlight安装环境进行了配置,本系统已经安装VS2010 和 Silverlight 5. 要开发Silverlight必须安装Developer Runtime 和 SDK , 且 ...
- PHP安装yaf在ubuntu下面的问题解决
1.在执行make的时候出现如下错误: In file included from /root/yaf-2.1.2/yaf_router.c:28: /usr/include/php/ext/pcre ...
- (2)麻省理工:计算机科学和 Python 编程导论
语义描述了我们如何从那些表达式中推导出相关的含义,从而解决我们想解决的问题. 语法描述了如何将合法表达式组合在一起. 我们要选择什么样的编程语言? 1. 不管我们选什么,都有如下过程: 输入信 ...
- Android Studio Activity Intent 闪退崩溃 Toolbar
今天写登录注册页面,点击登录页面的“注册”按钮后软件突然崩溃,直接闪退,因为是新手,只能去网上搜.虽然网上解决方法众多,但也没找到可行的.想起来可以看Logcat,马上重新运行应用,查看崩溃时的日志, ...