uva216 c++回溯法
因为题目要求最多8台电脑,所以可以枚举全排列,然后依次计算距离进行比较,枚举量8!=40320并不大,但这种方法不如回溯法好,当数据再大一些枚举就显得笨拙了,所以这个题我用回溯法做的,回溯有一个好处是一边生成序列一边判断,当判断这种情况下不可能满足要求时就停止向下递归,而返回上一层调用,减少运算量。
输出的时候用到了固定小数点后几位数输出的技巧,不过我还是给忘了,翻了一下以前写的博客迅速找到了,忽然切身体会到建一个自己的技术博客是多么的有意义!哈哈!
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cmath> using namespace std; struct computer
{
double x,y;
};
int n,C[8],Result[8];
double Min;
computer input[8];
bool vis[8]; double caldistance(int p1,int p2)
{
return 16+sqrt((input[p1].x-input[p2].x)*(input[p1].x-input[p2].x)+(input[p1].y-input[p2].y)*(input[p1].y-input[p2].y));
}
void dfs(int cur,double sum)
{
if (cur>1)
sum=sum+caldistance(C[cur-2],C[cur-1]);
if (cur==n)
{
if (sum<Min)
{
Min=sum;
for (int i=0;i<n;i++)
Result[i]=C[i];
}
}
else if (sum>=Min) return; //已经不符合的及时返回
else
for (int i=0;i<n;i++)
{
if (!vis[i])
{
C[cur]=i;
vis[i]=1;
dfs(cur+1,sum);
vis[i]=0; //一定要复位!!!!勿忘!
}
}
}
int main()
{
int col=0;
while(cin>>n&&n)
{
col++;
Min=1500;
memset(vis,0,sizeof(vis));
for (int i=0;i<n;i++)
cin>>input[i].x>>input[i].y;
dfs(0,0);
cout<<"**********************************************************"<<endl;
cout<<"Network #"<<col<<endl;
for (int i=0;i<n-1;i++)
{
cout<<"Cable requirement to connect ("<<fixed<<setprecision(0)<<input[Result[i]].x<<","<<input[Result[i]].y<<") to ("<<input[Result[i+1]].x<<","<<input[Result[i+1]].y<<") is "<<fixed<<setprecision(2)<<caldistance(Result[i],Result[i+1])<<" feet."<<endl; }
cout<<"Number of feet of cable required is "<<fixed<<setprecision(2)<<Min<<"."<<endl;
}
return 0;
}
uva216 c++回溯法的更多相关文章
- 回溯法解决N皇后问题(以四皇后为例)
以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...
- leetcode_401_Binary Watch_回溯法_java实现
题目: A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bot ...
- UVa 129 (回溯法) Krypton Factor
回溯法确实不是很好理解掌握的,学习紫书的代码细细体会. #include <cstdio> ]; int n, L, cnt; int dfs(int cur) { if(cnt++ == ...
- 实现n皇后问题(回溯法)
/*======================================== 功能:实现n皇后问题,这里实现4皇后问题 算法:回溯法 ============================= ...
- UVA - 524 Prime Ring Problem(dfs回溯法)
UVA - 524 Prime Ring Problem Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & % ...
- HDU 2553 n皇后问题(回溯法)
DFS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- HDU 1016 Prime Ring Problem (回溯法)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 八皇后问题-回溯法(MATLAB)
原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...
- 使用回溯法求所有从n个元素中取m个元素的组合
不多说了,直接上代码,代码中有注释,应该不难看懂. #include <stdlib.h> #include <stdio.h> typedef char ELE_TYPE; ...
随机推荐
- Most Powerful(ZOJ 3471状压dp)
题意:n个原子,两两相撞其中一个消失,产生能量,给出任意两原子相撞能产生的能量,求能产生的最大能量. 分析:dp[i]表示情况为i时产生的最大能量 /*#include <map> #in ...
- 《Python 学习手册4th》 第十七章 作用域
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- SeaJS学习笔记(一) ./ 和 ../ 区别
最近要去实习,公司里使用sea.js进行模块化开发 具体下载安装就不多说了,请参见SeaJS官网 <!DOCTYPE html> <html> <head> < ...
- bzoj 2229 [Zjoi2011]最小割(分治+最小割)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2229 [题意] 回答若干个关于割不超过x的点对数目的询问. [思路] [最小割最多有n ...
- 读《编写高质量代码-Web前端开发修炼之道》笔记
第一章 1.Web标准由一系列标准组合而成,核心理念是将网页的结构,样式和行为分离,所以分为三大部分:结构标准,样式标准和行为标准.结构标准包括XML标准,XHTML标准,HTML标准:样式标准指CS ...
- Tkinter教程之Checkbutton篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811306 #Tkinter教程之Checkbutton篇#Checkbutton又称为多选按 ...
- sf空间配置
1.创建VHost 记住Homepage,打开VHost DNS标签页,创建Virtual Host,如下图: 2.Wcp上传文件 用户名是"sf用户名,sf项目名" ...
- 对FileUpload文件上传控件的一些使用方法说明
//创建时间:2014-03-12 //创建人:幽林孤狼 //说明:FileUpload文件上传控件使用说明(只是部分)已共享学习为主 //可以上传图片,txt文档.doc,wps,还有音频文件,视屏 ...
- Developer Tools(开发工具)
Google提供了使用Java和Python开发App Engine的免费工具.你可以从Google的网站上下载你所用语言和操作系统的软件开发包.Java用户可以以Eclipse集成开发环境的方式获取 ...
- ubuntu java jdk安装及环境变量设置
1.下载jdk1.7.0_79 (32位操作系统)jdk-7u79-linux-i586.tar.gz (64位操作系统)jdk-7u79-linux-x64.tar.gz http://www.or ...