UVA 216 Getting in Line
2016-07-27 20:23
423 查看
UVA-216
题意:给出若干个点,只能用一条线连接,求最小费用(?反正是距离+16.0)。解题思路:深搜暴力枚举第i个连接的点,计算下总和。注意下输出。漏了一个 . 我WA了2次。
/************************************************************************* > File Name: UVA-216.cpp > Author: Narsh > > Created Time: 2016年07月27日 星期三 09时44分53秒 ************************************************************************/ #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int ans[10],temp[10],n,x[10],y[10]; double Min; bool pd[10]; void dfs(int now, double dis) { if (now > n) { if (dis < Min) { for (int i = 1; i <= n; i++) ans[i]=temp[i]; Min=dis; } return ; } double T; for (int i = 1; i <= n; i++) if (pd[i]) { pd[i]=false; temp[now]=i; if (now != 1) T = sqrt((x[i]-x[temp[now-1]])*(x[i]-x[temp[now-1]])+(y[i]-y[temp[now-1]])*(y[i]-y[temp[now-1]]))+16.0; else T=0; dfs(now+1,dis+T); pd[i]=true; } } int main() { int num=0; while (scanf("%d",&n) && n) { memset(pd,true,sizeof(pd)); for (int i = 1; i <= n; i++) scanf("%d%d",&x[i],&y[i]); Min=99999999.99; dfs(1,0); printf("**********************************************************\n"); printf("Network #%d\n",++num); for (int i = 1; i < n; i++) { double dis = sqrt((x[ans[i]]-x[ans[i+1]])*(x[ans[i]]-x[ans[i+1]])+(y[ans[i]]-y[ans[i+1]])*(y[ans[i]]-y[ans[i+1]]))+16.0; printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n",x[ans[i]],y[ans[i]],x[ans[i+1]],y[ans[i+1]],dis); } printf("Number of feet of cable required is %.2lf.\n",Min); } }
相关文章推荐
- ZedBoard移植Linux(精简版)及BOA服务器的搭建
- CodeIgniter框架源码笔记(9)——日志记录类Log.php
- print()的作用是什么?
- HDU 4596
- AJAX简介
- 关于OSI七层网路链路层安全和MAC泛红攻击原理
- mysql 主从配置详解
- 学习过程中整理的有关centos的一些安装笔记
- 浅析Windows安全认证机制及利用
- River Hopscotch poj 3258
- 动画
- 关于参加学科竞赛的心得感想
- Maximum Subarray
- 17.1
- 学习Android源码应该避免的
- Js基础学习之-- 利用GET方法实现ajax请求
- 第二次作业
- C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
- c++实现图像旋转任意角度
- Android textview实现局部点击