UVA 216 Getting in Line

本文介绍了一种通过遍历所有可能的计算机排列方式来找出连接这些计算机所需的最短电缆长度的方法。该方法适用于由2到8台计算机组成的线性网络,并详细展示了如何计算任意两台相邻计算机之间的电缆长度。
部署运行你感兴趣的模型镜像

分析

一题普通的题目。需要你选择最短的一条路连接多台计算机。
问题在于选哪两台连接?暴力求解。假设把计算机标号,求其全排列。
对于每一个排列,两两求路径,累加求总长,如果累加过程中已经大于等于最小值,可以直接返回,无需再计算(不过这么做好像并没有什么卵用..)。如果小于,则更新要输出的答案,简单粗暴

思路

对于{0,1,2,...,n1}如何全排列?

int perm[MAX_N], N;
bool used[MAX_N];
void dfs(int cur)
{
    if (cur == N) {
        /*for(int i = 0; i < N; i++) printf("%d ", perm[i]); printf("\n");*/
        return;
    } else for (int i = 0; i < N; i++)
        if (!used[i]) { perm[cur] = i; used[i] = true; dfs(cur+1); used[i] = false; }
}

代码

#include <cstdio>
#include <cmath>
#define MAX_N 10
#define INF 100000000

int G[MAX_N][2], N;
struct p { int fx, fy, sx, sy; double feet; } R[MAX_N];
int perm[MAX_N];
bool used[MAX_N];
double feet[MAX_N], min;

void dfs(int cur)
{
    if (cur == N) {
        double sum = 0;
        for (int i = 1; i < N; i++) {
            feet[i] = sqrt((G[perm[i]][0]-G[perm[i-1]][0])*(G[perm[i]][0]-G[perm[i-1]][0])
                    + (G[perm[i]][1]-G[perm[i-1]][1])*(G[perm[i]][1]-G[perm[i-1]][1]))+ 16.00;
            sum += feet[i];
            if (sum >= min) return;
        }
        min = sum;
        for (int i = 0; i < N-1; i++) {
            R[i].fx = G[perm[i]][0];   R[i].fy = G[perm[i]][1]; R[i].sx = G[perm[i+1]][0];
            R[i].sy = G[perm[i+1]][1]; R[i].feet = feet[i+1];
        }
    } else for (int i = 0; i < N; i++)
        if (!used[i]) { perm[cur] = i; used[i] = true; dfs(cur+1); used[i] = false; }
}

void solve()
{
    min = INF;
    dfs(0);
    for (int i = 0; i < N-1; i++)
        printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2f feet.\n",
            R[i].fx, R[i].fy, R[i].sx, R[i].sy, R[i].feet);
    printf("Number of feet of cable required is %.2f.\n", min);
}

int main()
{
    int T = 0;
    while (scanf("%d", &N), N) {
        for (int i = 0; i < N; i++) scanf("%d%d", &G[i][0], &G[i][1]);
        printf("**********************************************************\n");
        printf("Network #%d\n", ++T);
        solve();
    }
    return 0;
}

题目

Description

Computer networking requires that the computers in the network be linked.

This problem considers a “linear” network in which the computers are chained together so that each is connected to exactly two others except for the two computers on the ends of the chain which are connected to only one other computer. A picture is shown below. Here the computers are the black dots and their locations in the network are identified by planar coordinates (relative to a coordinate
system not shown in the picture).

Distances between linked computers in the network are shown in feet.

For various reasons it is desirable to minimize the length of cable used.

Your problem is to determine how the computers should be connected into such a chain to minimize the total amount of cable needed. In the installation being constructed, the cabling will run beneath the floor, so the amount of cable used to join 2 adjacent computers on the network will be equal to the distance between the computers plus 16 additional feet of cable to connect from the floor to the computers and provide some slack for ease of installation.

The picture below shows the optimal way of connecting the computers shown above, and the total length of cable required for this configuration is (4+16)+ (5+16) + (5.83+16) + (11.18+16) = 90.01 feet.

Input

The input file will consist of a series of data sets. Each data set will begin with a line consisting of a single number indicating the number of computers in a network. Each network has at least 2 and at most 8 computers. A value of 0 for the number of computers indicates the end of input.

After the initial line in a data set specifying the number of computers in a network, each additional line in the data set will give the coordinates of a computer in the network. These coordinates will be integers in the range 0 to 150. No two computers are at identical locations and each computer will be listed once.

Output

The output for each network should include a line which tells the number of the network (as determined by its position in the input data), and one line for each length of cable to be cut to connect each adjacent pair of computers in the network. The final line should be a sentence indicating the total amount of cable used.

In listing the lengths of cable to be cut, traverse the network from one end to the other. (It makes no difference at which end you start.) Use a format similar to the one shown in the sample output, with a line of asterisks separating output for different networks and with distances in feet printed to 2 decimal places.

Sample Input

6
5 19
55 28
38 101
28 62
111 84
43 116
5
11 27
84 99
142 81
88 30
95 38
3
132 73
49 86
72 111
0

Sample Output

**********************************************************
Network #1
Cable requirement to connect (5,19) to (55,28) is 66.80 feet.
Cable requirement to connect (55,28) to (28,62) is 59.42 feet.
Cable requirement to connect (28,62) to (38,101) is 56.26 feet.
Cable requirement to connect (38,101) to (43,116) is 31.81 feet.
Cable requirement to connect (43,116) to (111,84) is 91.15 feet.
Number of feet of cable required is 305.45.
**********************************************************
Network #2
Cable requirement to connect (11,27) to (88,30) is 93.06 feet.
Cable requirement to connect (88,30) to (95,38) is 26.63 feet.
Cable requirement to connect (95,38) to (84,99) is 77.98 feet.
Cable requirement to connect (84,99) to (142,81) is 76.73 feet.
Number of feet of cable required is 274.40.
**********************************************************
Network #3
Cable requirement to connect (132,73) to (72,111) is 87.02 feet.
Cable requirement to connect (72,111) to (49,86) is 49.97 feet.
Number of feet of cable required is 136.99.

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

Nano-ESG数据资源库的构建基于2023年初至2024年秋季期间采集的逾84万条新闻文本,从中系统提炼出企业环境、社会及治理维度的信息。其构建流程首先依据特定术语在德语与英语新闻平台上检索,初步锁定与德国DAX 40成分股企业相关联的报道。随后借助嵌入技术对文本段落执行去重操作,以降低内容冗余。继而采用GLiNER这一跨语言零样本实体识别系统,排除与目标企业无关的文档。在此基础上,通过GPT-3.5与GPT-4o等大规模语言模型对文本进行双重筛选:一方面判定其与ESG议题的相关性,另一方面生成简明的内容概要。最终环节由GPT-4o模型完成,它对每篇文献进行ESG情感倾向(正面、中性或负面)的判定,并标注所涉及的ESG具体维度,从而形成具备时序特征的ESG情感与维度标注数据集。 该数据集适用于多类企业可持续性研究,例如ESG情感趋势分析、ESG维度细分类别研究,以及企业可持续性事件的时序演变追踪。研究者可利用数据集内提供的新闻摘要、情感标签与维度分类,深入考察企业在不同时期的环境、社会及治理表现。此外,借助Bertopic等主题建模方法,能够从数据中识别出与企业相关的核心ESG议题,并观察这些议题随时间的演进轨迹。该资源以其开放获取特性与连续的时间覆盖,为探究企业可持续性表现的动态变化提供了系统化的数据基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
本软件提供多种基于张量理论的流动诱导纤维取向计算功能,涵盖Jeffrey模型、Folgar-Tucker模型及各向异性旋转扩散系列(如Phelps-Tucker五参数模型、iARD、pARD、MRD与Wang双参数模型)以及慢速动力学方法(包括SRF、RSC与RPR)。针对四阶方向张量,支持三维空间中的线性、二次、混合、正交各向异性、自然及IBOF闭合近似;在平面取向分析中,则提供Bingham分布、自然近似、椭圆半径法、正交各向异性D型与非正交F型等多种闭合方案。 软件可计算平面或三维条件下的完整方向分布函数,适用于瞬态或稳态过程,并整合了Jeffery、Folgar-Tucker与ARD等基础取向动力学模型。同时支持基于Phelps-Tucker理论的纤维长度分布演化模拟。 在线弹性刚度预测方面,集成了平均场模型体系,包括Halpin-Tsai公式、稀释Eshelby解、Mori-Tanaka方法及Lielens双夹杂模型,适用于单向或分布型纤维取向情况。所有刚度模型均可导出对应的热应力张量与热膨胀张量。 此外,软件具备经典层压板理论分析能力,可处理随厚度变化的纤维取向对复合材料板刚度的影响。在分布函数重构方面,提供Jeffery解析解、Bingham分布、椭圆半径法及四阶最大熵函数等多种方法用于平面取向分布的重建。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值