uva216 Getting in Line
题目大意:给定一些电脑的笛卡尔平面直角坐标系坐标,求将这些电脑连成一条链的最小总距离(单位:ft),由于连线问题,每两台电脑之间的连接距离要多16 ft。
思路:全枚举暴搜。
可行性剪枝:当早已枚举完了n台电脑时,剪枝。
最优化剪枝:若当前的累计距离总和超过了已求出的最小距离总和,意味着再搜索也无法得出更优解,则剪枝。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int ans[8],dans[8],n;
bool vis[8];
struct node{int x,y;}a[8];
double dis[8][8],tot;
inline double cal(int i,int j)
{
return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
void dfs(int cur,double sum)
{
if(sum>=tot)return;
if(cur>=n){
tot=sum;
for(int i=0;i<n;i++)
ans[i]=dans[i];
}
for(int i=0;i<n;i++)
if(!vis[i]){
vis[i]=1;
dans[cur]=i;
double tmp=cur?dis[dans[cur-1]][i]:0;
dfs(cur+1,sum+tmp);
vis[i]=0;
}
}
void Init()
{
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
dis[i][j]=dis[j][i]=cal(i,j)+16;
tot=(double)0x3f3f3f3f;
}
void out(int &T)
{
puts("**********************************************************");
printf("Network #%d\n",++T);
for(int i=1;i<n;i++){
int p=ans[i-1],q=ans[i];
printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n",a[p].x,a[p].y,a[q].x,a[q].y,dis[p][q]);
}
printf("Number of feet of cable required is %.2lf.\n",tot);
}
int main()
{
int T=0;
while(scanf("%d",&n)&&n){
Init();
dfs(0,0);
out(T);
}
return 0;
}
//此程序是首次全程在ubuntu(of linux)环境下编写的,以示纪念;
uva216 Getting in Line的更多相关文章
- 备战NOIP每周写题记录(一)···不间断更新
※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
- Error on line -1 of document : Premature end of file. Nested exception: Premature end of file.
启动tomcat, 出现, ( 之前都是好好的... ) [lk ] ERROR [08-12 15:10:02] [main] org.springframework.web.context.Con ...
- 关于xml加载提示: Error on line 1 of document : 前言中不允许有内容
我是在java中做的相关测试, 首先粘贴下报错: 读取xml配置文件:xmls\property.xml org.dom4j.DocumentException: Error on line 1 of ...
- Eclipse "Unable to install breakpoint due to missing line number attributes..."
Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...
- Linix登录报"/etc/profile: line 11: syntax error near unexpected token `$'{\r''"
同事反馈他在一测试服务器(CentOS Linux release 7.2.1511)上修改了/etc/profile文件后,使用source命令不能生效,让我帮忙看看,结果使用SecureCRT一登 ...
- [LeetCode] Line Reflection 直线对称
Given n points on a 2D plane, find if there is such a line parallel to y-axis that reflect the given ...
- [LeetCode] Tenth Line 第十行
How would you print just the 10th line of a file? For example, assume that file.txt has the followin ...
- [LeetCode] Max Points on a Line 共线点个数
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...
随机推荐
- Ubuntu开机黑屏,无法进入系统
今天早上起来开机发现Ubuntu进不去了,启动项选择之后长时间的black of screen,击键盘.点鼠标毫无反应,后来实在等不下去了就按了一下电源键,以平时的性格就是强制关机的,这次轻轻碰一下就 ...
- block 页面传值小结
我以自己项目中的一个模块为例,首先有两个页面,第一个页面为显示城市页面,第二个页面为选择要使用block传的值(城市名). 第一个页面中的显示控件: //自定义左部定位视图 self.locView ...
- iOS 使用GCD实现倒计时效果
在APP开发过程中,经常有需要实现倒计时效果, 比如语音验证码倒计时...代码如下: __block int timeout = 100; dispatch_queue_t queue = dispa ...
- 浅析Dagger2的使用
什么是Dagger2 Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护. 我们知道Dagger是一个依 ...
- 巧用Xode中的代码块(转)
在我们编码的过程中,总会发现有一些重复的编码工作,可能你会不厌其烦的去copy and paste,但是你有去考虑过怎样解决这样的问题吗?其实现在很多的编程IDE都能帮助我们减少一些编码的任务,提高编 ...
- cocoapod-使用cocoapod安装AFNetworking3.0
1. 在终端用cd命令加入到工程目录下,用命令:touch Podfile创建一个Podfile文件. 2. Podfile文件: #source 'https://github.com/CocoaP ...
- Html5 dataset--自定义属性
dataset--自定义属性 HTMLElement.dataset data-*属性集 元素上保存数据 <div id="user" data-id="12345 ...
- 每日Scrum(5)
进入冲刺第五天,软件的界面设计成为主打,收集学校的很多美图是我们组的任务: 问题在于软件已很难有很大的改进,大方向也都是变不了的
- 页断裂(partial write)与doublewrite技术
mysql double write (二次写)是mysql innodb存储引擎的一个重要特性,本人这两天翻阅了相关的资料,结合自己已有的知识,说说自己对double write的理解,供各位看官参 ...
- 关于 redis、memcache mongoDB 的对比
from:http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能 ...