当前位置: 首页 > 编程日记 > 正文

UVA 216 Getting in Line

大意:给你一些定点,让你以代价最小的边将所有的点连起来。

思路:数据范围很小,可以通过最小生成树或者回溯来解决。

最小生成树去写时不知道哪错了,于是用回溯模拟了一遍,相当于模拟一个数组的全排列。

AC CODE:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>     //INT_MAX,整形范围内的最大整数。
#include <algorithm>
using namespace std;

#define INF 0x3f3f3f3f
const int SIZE = 110;

double d[SIZE];
int vis[SIZE], save[SIZE], ans[SIZE];
int n;
double Min;

struct node
{
    double x, y;
}a[SIZE];

double fun(const node a, const node b)
{
    return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}

void init()
{
    memset(vis, 0sizeof(vis));
    for(int i = 0; i < n; i++) ans[i] = i;
    Min = INF;
}

void dfs(int cur, double sum)
{
    if(cur == n)
    {
        if(Min > sum)
        {
            Min = sum;
            memcpy(ans, save, sizeof(save));
        }
        return ;
    }
    if(sum >= Min) return ;
    for(int i = 0; i < n; i++) if(!vis[i])
    {
        vis[i] = 1;
        save[cur] = i;
        if(cur == 0)
        {
            dfs(cur+10);
        }
        else
        {
            double dis = fun(a[save[cur]], a[save[cur-1]]);
            dfs(cur+1, sum+dis);
        }
        vis[i] = 0;
    }
}

int main()
{
    int times = 0;
    while(~scanf("%d", &n) && n)
    {
        init();
        for(int i = 0; i < n; i++)
        {
            scanf("%lf%lf", &a[i].x, &a[i].y);
        }
        dfs(00);
        printf("**********************************************************\n");
        printf("Network #%d\n", ++times);
        for(int i = 1; i < n; i++)
        {
            double dis = fun(a[ans[i]], a[ans[i-1]]) + 16.00;
            printf("Cable requirement to connect (%.lf,%.lf) to (%.lf,%.lf) is %.2lf feet.\n", a[ans[i-1]].x, a[ans[i-1]].y, a[ans[i]].x, a[ans[i]].y, dis);
        }
        double tot = (n-1)*16.00;
        printf("Number of feet of cable required is %.2lf.\n", Min+tot);
    }
}

WA CODE:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>     //INT_MAX,整形范围内的最大整数。
#include <algorithm>
using namespace std;

#define INF 0x3f3f3f3f
const int SIZE = 110;


double w[SIZE][SIZE];
double d[SIZE];
int v[SIZE];
int n;

struct node
{
    double x, y;
}a[SIZE];

double fun(const node a, const node b)
{
    return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}

double Prim(int src)
{
    int i, j, first = 0;
    double cnt = 0;
    int pre = src;
    for(i = 1; i <= n; i++) d[i] = (i == src)? 0:INF;
    for(i = 1; i <= n; i++)
    {
        int x;
        double m = INF;
        for(int y = 1; y <= n; y++) if(!v[y] && m > d[y]) m = d[x=y];
        v[x] = 1;
        cnt += m;
        if(first)
        {
            printf("Cable requirement to connect (%.lf,%.lf) to (%.lf,%.lf) is %.2lf feet.\n", a[pre].x, a[pre].y, a[x].x, a[x].y, m+16);
        }
        for(int y = 1; y <= n; y++) d[y] = min(d[y], w[x][y]);
        pre = x;
        first = 1;
    }
    return cnt;
}

void init()
{
    memset(v, 0sizeof(v));
    memset(d, 0sizeof(d));
    memset(a, 0sizeof(a));
    for(int i = 1; i <= SIZE; i++)
        for(int j = 1; j <= SIZE; j++)
            w[i][j] = w[j][i] = INF;
}



int main()
{
    int i, j;
    int times = 0;
    while(~scanf("%d", &n) && n)
    {
        init();
        for(i = 1; i <= n; i++)
        {
            scanf("%lf%lf", &a[i].x, &a[i].y);
        }
        for(i = 1; i <= n; i++)
        {
            for(j = 1; j <= n; j++)
            {
                if(i == j) continue;
                w[i][j] = w[j][i] = fun(a[i], a[j]);
            }
        }
        printf("**********************************************************\n");
        printf("Network #%d\n", ++times);
        double ans = Prim(1);
        double tot = (n-1)*16.00;
        printf("Number of feet of cable required is %.2lf.\n", ans+tot);
    }
    return 0;
}

转载于:https://www.cnblogs.com/g0feng/archive/2012/10/13/2722749.html

相关文章:

【青少年编程】【三级】猜数字

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 猜数字…

参加web前端开发培训具体要学什么内容

学习web前端技术不是一天两天就能学会的&#xff0c;想要成为一名合格的web前端工程师&#xff0c;一定要进行系统的培训学习&#xff0c;那么下面小编就为大家详细的介绍一下参加web前端开发培训具体要学什么内容? 参加web前端开发培训具体要学什么内容? 一、了解web前端 we…

最长公共上升子序列 LCIS

关于子序列什么什么的问题&#xff0c;以前一直没怎么在意过&#xff0c;直到省赛突然考了一个赤裸裸的LCIS&#xff0c;这下才着急了&#xff0c;因为忘记怎么做了&#xff0c;而且模版也没有带。从第三名一直掉到第11名&#xff0c;而且超上来的&#xff0c;全都是会做这题的…

【组队学习】【26期】动手学数据分析

动手学数据分析 论坛版块&#xff1a; http://datawhale.club/c/team-learning/25-category/25 开源内容&#xff1a; https://github.com/datawhalechina/hands-on-data-analysis 学习目标 了解数据分析中基本库的操作&#xff08;比如&#xff1a;pandas,numpy和matplo…

利用FFmpeg切割视频

关键词:FFmpeg&#xff0c;seek&#xff0c;ss&#xff0c;t&#xff0c;to&#xff0c;搜索&#xff0c;定位介绍如果你想要从输入文件中切割一部分&#xff0c;需要用到ss选项。快速定位需要将ss放在输入文件的前面&#xff08;即-i的前面&#xff09;ffmpeg-ss 00:03:00 -i …

哪些人适合参加软件测试培训?

想要进入互联网行业也不是一句两句那么简单的&#xff0c;近几年&#xff0c;很多人都想要学习软件测试技术&#xff0c;通过做软件测试岗位进入到互联网行业&#xff0c;那么所有人都可以学习这个技术吗?我们下面就来详细的了解一下哪些人适合参加软件测试培训? 哪些人适合参…

Linux的su命令,sudo命令和限制root远程登录

3.7 su命令&#xff1a; su命令是用来切换用户的&#xff0c;例如我要从root用户切换到user2用户&#xff1a; 这个 - 选项是彻底切换用户的意思&#xff0c;如果不加 - 选项也可以&#xff0c;但是切换得不彻底&#xff0c;例如当前的家目录还是root&#xff0c;环境变量也还是…

MongoDB 标准连接字符串

MongoDB 标准连接字符串mongodb://[username:password]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]注&#xff1a;并非所有MongoDB驱动都支持完整的连接字符串&#xff0c;不支持此格式连接字串的驱动会有替代连接方案&#xff0c;具体请参照驱…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 3. 对数几率回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 以往内容&#xff1a; 西瓜书公式推导讲解来了&#xff01;0. 导学1. 一…

零基础ui设计培训一定要知道字体设计规则

作为一名UI设计师&#xff0c;最最重要的就是字体设计这方面&#xff0c;很多UI设计工作中&#xff0c;字体是必不可缺的&#xff0c;下面小编就为大家详细的介绍一下零基础ui设计培训一定要知道字体设计规则。 零基础ui设计培训一定要知道字体设计规则&#xff1a; 在计算机普…

centos 脚本基础练习1

1&#xff0c;写一个脚本&#xff1a;判断当前系统上是否有用户的默认shell 为bash&#xff1b;如果有&#xff0c;就显示有多少个这类用户&#xff1b;否则就显示没有这类用户&#xff1b;[rootlocalhost mscripts]# cat lx1.sh #!/bin/bashgrep "bash$" /etc/passw…

【组队学习】【26期】图神经网络

图神经网络 论坛版块&#xff1a; http://datawhale.club/c/team-learning/27-category/26 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-nlp/tree/master/GNN 学习目标 我们的组队学习将带领大家入门图神经网络&#xff0c;为大家今后在学习和…

as3回调方法模拟事件监听

//Client.as package callback{import flash.display.Sprite;public class Client extends Sprite{public function Client() {//调用Seriver类的callFun方法,并把clientFun方法传给callFun方法var server : Server new Server();server.callFun(clientFun);}//定义一个回调方…

java培训教程:什么是匿名内部类?怎样创建匿名内部类?

本期java教程要为大家分享的是关于java中的匿名内部类&#xff0c;相信很多同学在学java技术的时候有了解过&#xff0c;下面我们就来详细的看一下。 java培训教程&#xff1a;什么是匿名内部类?怎样创建匿名内部类?匿名内部类是没有名称的内部类。在Java中调用某个方法时&am…

lvs后端realserver的vip管理脚本lvs-realsvr.sh

lvs后端realserver的vip管理脚本lvs-realsvr.sh 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/bin/bash# # 2015/3/27# lvs real server## chkconfig: - 85 15# description: contro…

【组队学习】【26期】Linux教程

Linux教程 论坛版块&#xff1a; http://datawhale.club/c/team-learning/27-category/27 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Linux 学习目标 Linux组队学习形式主要为理论代码实践的方式&#xff0c;学习结束后…

java培训机构如何选择适合自己的

java培训机构如今在市面上是越来越多了&#xff0c;主要还是大多数人想要进入到互联网行业&#xff0c;都会先选择学习java技术&#xff0c;那么下面我们就来详细的了解一下java培训机构如何选择适合自己的吧。 java培训机构如何选择适合自己的?结合以往学长学姐们的反馈及总结…

黑马程序员5 多线程

------- android培训、java培训、期待与您交流&#xff01; ---------- 创建线程的第一种方式&#xff1a;继承Thread类。步骤&#xff1a;1&#xff0c;定义类继承Thread。2&#xff0c;复写Thread类中的run方法。 目的&#xff1a;将自定义代码存储在run方法。让线程运行。 3…

解决 mac ox 终端显示bogon 的问题

方法一. 将DNS设置为Google的DNS服务器地址 8.8.8.8 方法二. 在终端进行设置 sudo hostname yourname 转载于:https://www.cnblogs.com/yshuai/p/7911869.html

【组队学习】【26期】编程实践(Django网站开发)

编程实践&#xff08;Django网站开发&#xff09; 论坛版块&#xff1a; http://datawhale.club/c/team-learning/28-category/28 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Django 学习目标 从零开始搭建一个属于自己…

asp.net 防注入

http://www.cnblogs.com/zxlin25/archive/2009/03/09/1407237.html转载于:https://www.cnblogs.com/alwayscainiao/archive/2012/10/23/2735011.html

ui设计师要懂哪些B端设计原则?

UI设计师是一个非常广泛的职位&#xff0c;它所接触的工作内容是非常多的&#xff0c;其中B端的设计内容就是一种&#xff0c;产品设计对于不同行业、不同公司、不同决策者都会有很大的差异&#xff0c;没有最好的设计原则&#xff0c;只有最适合你产品的原则。今天小编就为大家…

StartOS 5.0 正式版发布

StartOS 5.0正式版发布了。 StartOS —— 是由东莞瓦力网络科技有限公司发行的开源操作系统&#xff0c;符合国人的使用习惯&#xff0c;预装常用的精品软件&#xff0c;操作系统具有运行速度快&#xff0c;安全稳定&#xff0c;界面美观&#xff0c;操作简洁明快 等特点。Star…

【组队学习】【26期】编程实践(Python办公自动化)

编程实践&#xff08;Python办公自动化&#xff09; 论坛版块&#xff1a; http://datawhale.club/c/team-learning/29-category/29 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/OfficeAutomation 学习目标 了解通过pyth…

软件测试培训分享:性能测试的目的是什么

在软件测试培训中&#xff0c;讲师们会讲到关于性能测试这方面&#xff0c;很多人都不理解&#xff0c;性能测试的目的是什么?性能测试的目的是为了测试产品是否满足在需求说明书中规定的性能&#xff0c;是否达到用户的性能要求&#xff0c;发现产品存在的性能瓶颈&#xff0…

[Android Pro] 有关Broadcast作为内部类时注册的一些问题

很经常Broadcast都会写成一个Activity或者Service的内部类。这时候的注册和普通有点小区别。 有两种情况1、假如是再Manifest文件里面静态注册的话&#xff0c;需要注意。ex&#xff1a;<applicationandroid:icon"drawable/ic_launcher"android:label"string…

NCEPU:线下组队学习周报(008)

线下组队学习 经过一段时间的准备&#xff0c;我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为&#xff1a; &#xff08;1&#xff09;周志华的《机器学习》&#xff08;西瓜书&#xff09; …

shell脚本初级教学(从基本脚本开始学起)

shell脚本的意义就在于实现以后的自动化运维,Linux其实也是基于shell脚本的所以我今天给大家教两个简单的脚本,并且解释.第一个抽奖脚本:思路:首先创建一个vim文件[rootserver0 ~]# vim /root/choujiangjiaoben.sh // (sh结尾是给自己一个是shell脚本的注释) #!/bin/bash // (以…

UI设计培训分享:app图标设计要遵循哪些原则

APP图片设计是UI设计工作中经常会遇到的&#xff0c;一个好的APP产品&#xff0c;图标的设计是非常重要的&#xff0c;本期小编为大家分享的UI设计培训教程就是app图标设计要遵循哪些原则?来看看下面的详细介绍。 UI设计培训分享&#xff1a;app图标设计要遵循哪些原则? 一、…

如何使用netwokx进行复杂网络的中心性分析?

如何使用netwokx进行复杂网络的中心性分析&#xff1f; 这是本学期在大数据哲学与社会科学实验室做的第七次分享了。 第一次分享的是&#xff1a; 如何利用“wordcloudjieba”制作中文词云&#xff1f; 第二次分享的是&#xff1a; 如何爬取知乎中问题的回答以及评论的数据…