UVA 216 Getting in Line
2013-08-03 14:44
330 查看
题意就是求将n个点所连接起来的最短距离,每两个点之间的距离还需要加16。
我用的是暴力(全排列),可以用回溯法,但是回溯法我现在还没学会,等我学会了再写一遍。
据说效率更高些~
我用的是暴力(全排列),可以用回溯法,但是回溯法我现在还没学会,等我学会了再写一遍。
据说效率更高些~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
#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; }
相关文章推荐
- uva216-Getting in Line(网络连线)
- UVa 216 - Getting in Line(回溯法)
- UVA 216 Getting in Line
- UVA 216 Getting in Line
- UVA 216(Getting in Line)回溯
- uva216 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 dfs
- uva 216 Getting in Line
- UVA216 - Getting in Line(哈密顿图)
- uva 216 Getting in Line
- UVa 216 - Getting in Line, 暴力与回溯