USACO 2.4 cowtour(Cow Tours)

本文介绍了USACO题目Cow Tours的内容,包括牧场的定义、牛道的限制以及如何找到使得新牧场直径最小的连接策略。通过Floyd算法计算所有牧区之间的最短距离,并检查所有可能的连接以找到最小直径。最后提供了解题的主要步骤和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目描述

农夫约翰的农场里有很多牧区。牛道使一些牧区与其它一些牧区相连,组成一个牧场。但是目前,你能看到至少有两个牧区不能通过任何路径连通,这使农夫约翰的农场分成了多个牧场。
农夫约翰想在牧场里添加一条牛道,对这条牛道有以下限制:
一个牧场的“直径”就是牧场中离得最远的两个牧区的最短距离。考虑如下的有5个牧区的牧场,牧区用“*”表示,牛道用直线表示。
这里写图片描述
这个牧场的“直径”大约是12.07106, 因为所有的两对牧场之间最短路径集中最长的一条是从A到E的路径(路径是A到B到E)。
假设同一平面上另外一块牧场,如下所示:
这里写图片描述
在这个只有两个牧场的农场上,农夫约翰会在这两个牧场(即点集{A,B,C,D,E}和{F,G,H})之间添加一条牛道,这样连接在一起的牧场{A,B,C,D,E,F,G,H}的直径最小。
注意,牛道不会仅仅因为它们彼此交叉而连接在一起;它们只在同一个牧区连通。
输入文件包括牧区、牧区的坐标和一个对称“邻接”矩阵,该矩阵表示两个牧区是否由牛道连接。牧区不被认为是与自己相连的。下面是一个带注释的农场{A,B,C,D,E,F,G,H}的邻接矩阵:
这里写图片描述
其他邻接表中可以直接使用行列而不使用字母来表示牧区的连接。输入数据中不包括牧区的名称。
输入文件至少包括两个互不相通的牧场。
请编程找出一种方法,将输入中的两个牧场用一条牛道连接起来,使这个更大的新牧场有最小的直径。输出在所有牧场中最小的可能的直径。

程序名

cowtour

输入格式

行数 内容
第一行: 一个整数,N (1 <= N <= 150),牧区的数量
第2到N+1行: 两个整数,X和Y (0 <= X,Y <= 100000),表示牧场的位置;所有牧场的位置没有重复。
第N+2到2*N+1行: 每行包含N个数字(0或1),表示如上所述的邻接矩阵,其中行和列是按照刚才列出的牧区的顺序排列的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值