UVA216Getting in Line

来源:互联网 发布:js 多层嵌套json取值 编辑:程序博客网 时间:2024/06/05 05:55

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);    }}
0 0
原创粉丝点击