【发布时间】:2015-11-14 12:57:52
【问题描述】:
我遇到以下问题:
有很多节点,其中一些已经连接,但不是全部。我们必须添加连接,以便每个节点都与任何其他节点连接(不需要直接)。我们不想更改任何现有的连接。 节点必须用最少的线路连接(当前连接已经遵循此规则)。同样,从一个节点到另一个节点的路径必须经过最少数量的其他节点。当一切都以最佳方式连接时,我们想知道任何路径上的最大节点数。
输入:
以下数据由用户输入给出:
• 你得到两个整数:节点数 1 ≤ p ≤ 1.000.000 和
number 0 ≤ l ≤ p - 1 个现有连接。
• 然后 l 每两个行整数 a 和 b 介于 0 和 p - 1(含)之间,表示连接的端点。
输出:
输出应该是一个整数,表示任何路径上的最大节点数。(所以没有开始和端点)
例如当我们输入 p = 6, l = 4 和连接 2-0, 1-0, 5-3 和 4-3输出应该是 2。
我已经用 C++ 编写了一个程序,它执行以下操作:
int main(){
int p, l;
cin >> p >> l;
for (int i = 0; i < l; i++){
int a, b;
cin >> a >> b;
// store the connection a,b somehow
}
// solve the problem
cout << answer << endl;
}
我想将连接存储在一个 p - 1 乘以 p - 1 的数组中,如果该行存在则为 1,否则为 0。此外,我需要一些东西来决定如何以最佳方式建立连接并计算每条路径上的最大节点数量。我只被允许使用 C++ 的标准库。
有人可以帮我解决这个问题吗?提前致谢!
【问题讨论】:
-
"节点必须连接最少的线路(当前连接已经遵循此规则)。从一个节点到另一个节点的路径必须通过最少数量的其他节点。这对我来说似乎很矛盾。为了满足第二个,您需要一个完全连接的图,即从每个节点到其他节点的直线,没有中间节点。但这会使行数最大化。
-
它必须变成一个图,其中每个节点到任何其他节点都有一条路径。所以没有cykels。因为 cykel 意味着不需要的边缘