UVA 216 - Getting in Line
连接是:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=152
哟我AC了喔.就是用回溯法把每一种可能都找出来,然后看哪个最小。
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 const int MAXNUM = 8; 6 struct Point{ 7 int x; 8 int y; 9 }; 10 11 bool visit[MAXNUM]; 12 Point node[MAXNUM], temp[MAXNUM], final[MAXNUM]; 13 14 double dist(Point a, Point b) { 15 int x = a.x - b.x; 16 int y = a.y - b.y; 17 return sqrt(x*x + y*y); 18 } 19 20 // feet, temp_feet, level, nodes[], temp[], visit[], final[] 21 void traverse(double& feet, double temp_feet, int level, int num) { 22 if (level == num){ 23 feet = temp_feet; 24 25 for (int i = 0; i < num; i++) 26 final[i] = temp[i]; 27 } 28 29 for (int i = 0; i < num; i++){ 30 if (!visit[i]){ 31 visit[i] = true; 32 temp[level] = node[i]; 33 double next_temp_feet = temp_feet; 34 if (level) 35 next_temp_feet += dist(temp[level-1], temp[level]); 36 37 if (feet >= next_temp_feet) 38 traverse(feet, next_temp_feet, level+1, num); 39 visit[i] = false; 40 } 41 } 42 } 43 44 int main(int argc, char *argv[]){ 45 int num, network_num = 1; 46 cout.setf(ios::fixed); 47 cout.precision(2); 48 49 while (cin >> num && num){ 50 for (int i = 0; i < num; i++) 51 cin >> node[i].x >> node[i].y; 52 53 double feet = 0.0; 54 for (int i = 0; i < num-1; i++) 55 feet += dist(node[i], node[i+1]); 56 57 traverse(feet, 0, 0, num); 58 cout << "**********************************************************" << endl; 59 60 cout << "Network #" << network_num << endl; 61 for (int i = 0; i < num-1; i++){ 62 cout << "Cable requirement to connect " << "("; 63 cout << final[i].x << "," << final[i].y << ") to ("; 64 cout << final[i+1].x << "," << final[i+1].y << ") is "; 65 cout << dist(final[i], final[i+1]) + 16 << " feet." << endl; 66 } 67 cout << "Number of feet of cable required is " << feet + 16*(num-1) << "." << endl; 68 network_num++; 69 } 70 return 0; 71 }
转载于:https://www.cnblogs.com/frankdj412/archive/2013/02/04/2892023.html
UVA 216 - Getting in Line相关推荐
- UVA 216 Getting in Line
大意:给你一些定点,让你以代价最小的边将所有的点连起来. 思路:数据范围很小,可以通过最小生成树或者回溯来解决. 最小生成树去写时不知道哪错了,于是用回溯模拟了一遍,相当于模拟一个数组的全排列. AC ...
- π-Algorithmist分类题目(2)
原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- backtracking算法
详解backtracking 搞清楚回溯体,穷举多维度值,维度一定会加一 数值一定很小.搞清楚怎么处理输入输出. 有一定的模版. uva,112 这种思想和获取方式是我所追求的. 1 #include ...
- Poj 1755Triathlon 未Ac,先mark
地址:http://poj.org/problem?id=1755 题目: Triathlon Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- 转:西部数据NAS设备hack
通过该文学习一下常见硬件web漏洞.重点关注一下几个方面: 1.登录验证代码: 2.文件上传代码: 3.system/exec/popen等是否存在注入可能: 4.调用二进制文件: 5.未登陆可以访问 ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
- 递归神经网络 训练、推到、实现(网络资料整理)_codestorm_新浪博客
参考: RNN求解过程推导与实现 人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步] Hinton 的课件 我的最佳学习法就是通过玩具代码,一边调试一边学习理论.这篇博客通 ...
- C# AutoCAD ActiveX 二次开发 -- CAD图层合并
因使用AutoCAD版本为2004,2006版本以后才有.net开发包,因此采用ActiveX方式进行开发. 功能为:将几个CAD图层合并到其中一个上,并设置坐标,线和标记的颜色和字体. CAD对象的 ...
最新文章
- 最佳页面置换算法代码_(存储管理)页面置换算法
- python猜单词游戏_磁盘空间不足。
- 【攻防世界001】Guess-the-Number
- Bootstrap4+MySQL前后端综合实训-Day01-PM【position定位的四种方式、Flex布局语法教程及案例(概念、容器属性、项目属性)、双飞翼布局复习、Bootstrap4 教程】
- C51 printf修改如何能打印到不同的设备呢?
- chackbox的值 php获取_最详细最全的PHP面试题(附答案)
- Ext4.1 Grid 分页查询
- 英国科研学术网络Janet遭遇DDoS攻击
- 多模态 | 复旦推出跨视觉语言模态预训练模型,并达到SOTA
- 在html中frame标签的作用,HTML框架标签frameset、frame、iframe、noframes
- php这么把pdf转为world,php pdf如何转word
- spring aop原理
- 广义线性模型 matlab,基于Matlab的广义线性模型建模
- 7-6 华氏度转摄氏度(四舍五入)
- Rollup 插件开发牛刀小试
- java编写打砖块小游戏
- 谷粒商城--环境部署(2022/7/28最新)
- 电脑配置检测软件下载
- 如何清理C盘的垃圾文件
- C语言实现【小游戏——反弹球消砖块】
热门文章
- 面向串口编程java_Java串口编程例子
- php兴趣爱好复选框如何取值,php checkbox 取值详细说明
- python爬虫 入门+进阶_python爬虫入门到进阶(三)
- Linux export 命令设置环境目录
- matlab 放射治疗,dicom-rt解析及在精确放射治疗计划系统中的应用.pdf
- PSIM软件中 Simplified C Block模块 和 C Block模块区别
- NYOJ-心急的C小加(贪心)
- JAVA入门到精通-第7讲-成员方法-构造方法
- 学习 服务器部署 hello world
- 《高并发Oracle数据库系统的架构与设计》一1.4 本章小结