此题主要是把电脑连起来,但是其中还得加16,求最短的缆线长
直接暴力求解
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
double changdu(double x1,double y1,double x2,double y2)
{
double l=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return l;
}
int main()
{
int n;
int i,j,k=1;
double s[20];
double a[20];
int b[20],c[20];
double l,sum;
while(~scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
{
scanf("%lf%lf",&s[i],&a[i]);
b[i]=i;
}
double min=2147483645.0;
do
{
sum=0.0;
for(i=0;i<n-1;i++)
{
l=changdu(s[b[i]],a[b[i]],s[b[i+1]],a[b[i+1]])+16;
sum+=l;
}
if(sum<min)
{
min=sum;
for(i=0;i<n;i++)
c[i]=b[i];
}
}
while(next_permutation(b,b+n));
printf("**********************************************************\n");
printf("Network #%d\n",k);
k++;
for(i=0;i<n-1;i++)
{
l=changdu(s[c[i]],a[c[i]],s[c[i+1]],a[c[i+1]])+16;
printf("Cable requirement to connect (%.lf,%.lf) to (%.lf,%.lf) is %.2lf feet.\n",s[c[i]],a[c[i]],s[c[i+1]],a[c[i+1]],l);
}
printf("Number of feet of cable required is %.2lf.\n",min);
}
return 0;
}