UVA 216 Getting in Line
来源:互联网 发布:mac下安装nodejs 编辑:程序博客网 时间:2024/05/17 03:31
题意就是求将n个点所连接起来的最短距离,每两个点之间的距离还需要加16。
我用的是暴力(全排列),可以用回溯法,但是回溯法我现在还没学会,等我学会了再写一遍。
据说效率更高些~
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
#include <iostream>#include <cstdio>#include<cmath>#include<algorithm>using namespace std;int nn=1;struct point{double x;double y;}a[11];int b[11],c[11];double dis(point a,point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))+16; }int main(){ int n; int i; while(cin>>n) { if(n==0) break; for(i=0;i<n;i++) { cin>>a[i].x>>a[i].y; b[i]=i; } double min=1<<20; do{ double l=0,sum=0; for(i=0;i<n-1;i++) { l=dis(a[b[i]],a[b[i+1]]); sum+=l; } if(min>sum) { min=sum; for(i=0;i<n;i++) c[i]=b[i]; } }while(next_permutation(b,b+n)); printf("**********************************************************\n"); printf("Network #%d\n",nn++); for(i=0;i<n-1;i++) { double l=dis(a[c[i]],a[c[i+1]]); printf("Cable requirement to connect (%.lf,%.lf) to (%.lf,%.lf) is %.2lf feet.\n",a[c[i]].x,a[c[i]].y,a[c[i+1]].x,a[c[i+1]].y,l); } printf("Number of feet of cable required is %.2lf.\n",min); } return 0;}
- UVa 216 Getting in Line
- Uva 216 Getting in Line
- uva 216 - Getting in Line
- uva 216 - Getting in Line
- UVa 216 - Getting in Line
- uva-216 - Getting in Line
- Uva 216 - Getting in Line
- uva 216 - Getting in Line
- UVa 216 - Getting in Line
- uva 216 Getting in Line
- UVA 216 - Getting in Line
- UVA 216 Getting in Line
- UVA 216 Getting in Line
- UVa 216 Getting in Line
- UVA 216 - Getting in Line
- uva 216 Getting in Line
- uva - 216 - Getting in Line
- uva 216 - Getting in Line
- cocos2d 在一个面板上居中摆放多个图标
- 《算法竞赛-训练指南》第一章-1.24_pre-一维数组最大连续和
- 搞acm的,,,,,,
- acm教主系列
- gethostbyname
- UVA 216 Getting in Line
- Lazarus 中使用Grid++Report报表控件 的简单例子
- Linux多线程
- 6174问题
- ios开发代码笔记
- 扩展RBAC用户角色权限设计方案
- Stars
- Innode引擎监控的开启的方法
- 贝塞尔曲线移动 应用