标签:uva216
数据范围较小,暴力枚举全排列就行
// // main.cpp // uva216 // // Created by Fangpin on 15/3/8. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; struct Point{ int x,y; Point()=default; }; double len(const Point &a,const Point &b){ return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) ); } int main(int argc, const char * argv[]) { // insert code here... int n,ca=1; while(scanf("%d",&n),n){ vector<Point> a; vector<int> b; vector<int> lis; for(int i=0;i<n;++i){ Point tem; scanf("%d%d",&tem.x,&tem.y); a.push_back(tem); b.push_back(i); } double ans=0; lis=b; for(int i=0;i<a.size()-1;++i){ ans+=len(a[i],a[i+1]); } while(next_permutation(b.begin(),b.end())){ double tem=0; for(int i=0;i<a.size()-1;++i){ tem+=len(a[b[i]],a[b[i+1]]); } if(tem<ans){ ans=tem; lis=b; } } puts("**********************************************************"); printf("Network #%d\n",ca++); for(int i=0;i<a.size()-1;++i){ // printf( "Cable requirement to connect (%d,%d) to (%d,%d) is %lf feet.\n",a[lis[i]].x,a[lis[i]].y,a[lis[i+1]].x,a[lis[i+1]].y],len( a[lis[i]],a[lis[i+1]] ) ); cout<<"Cable requirement to connect ("<<int(a[lis[i]].x)<<","<< int(a[lis[i]].y)<<") to ("<<int(a[lis[i+1]].x)<<","<<int(a[lis[i+1]].y)<< ") is "; printf("%.2f",len(a[lis[i]],a[lis[i+1]])+16); cout<<" feet.\n"; } cout<<"Number of feet of cable required is "; printf("%.2f.\n",ans+(n-1)*16); // puts("**********************************************************"); } return 0; }
标签:uva216
原文地址:http://blog.csdn.net/fangpinlei/article/details/44155979