路径上的最大节点数是多少?
What's the maximum number of nodes on a path?
我遇到以下问题:
有很多节点,其中一些节点已经连接,但不是全部。我们必须添加连接,以便每个节点都与任何其他节点连接(不需要直接连接)。我们不想更改任何现有的连接。节点必须使用最少的线路连接(当前连接已遵循此规则)。此外,从一个节点到另一个节点的路径必须通过最少数量的其他节点。我们想知道当所有东西都以最佳方式连接时,任何路径上的最大节点数。
输入:
以下数据由用户输入提供:
•您得到两个整数:数字1≤p≤1.000.000的节点和现有连接的数量0≤l≤p−1
•然后l行,每两个整数a和b在0和p−1之间(包括0和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++的标准库。
有人能帮我做这个吗?提前感谢!
这听起来像是一个基本的算法作业。。。
给定现有图,找到最大路径。除非您只有两个节点,否则这将是您的答案。
将所有新节点连接到任何不是最大路径的叶节点的节点。
(连接节点的线称为"边"。)
如果我误解了你的问题,请告诉我。
编辑这是一个简单的图表。最大路径是(a,b,c)[这与(c,b,a)相同--我们总是对两个叶子排序,使最小的先到]。
(a)--(b)--(c)
我可以通过拾取任何叶节点(一个正好有1条边的节点)并找到另一个叶节点来找到它。最远的叶节点将是距离该节点的最长/最大路径。
从你刚刚找到的叶节点再做一次,你就会得到整个图的最长/最大路径。
让我们来看看这是如何与一个新的图形一起工作的:
(a)--(b)--(c)--(d)--(e)--(f)
|
(s)
我将从节点开始。如果我找到它的最长路径,我将找到节点(f)。节点(f)必须是图中最长路径上的端点之一。(我让你想想原因。)
现在,我再次从节点(f)开始。从(f)到(a)的最长路径。我现在有了图中最长的路径:(a,b,c,d,e,f)。
这是另一张图:
(a)--(b)--(c)
|
(d)
有许多最长的路径可供选择。(a、b、c)、(a、b、d)和(c、b、d)。重要的是,它们都存在并且具有相同的长度。
现在,我应该将新的节点(e)连接到哪个节点,这样我就不会更改最长的路径?简单:
(e)
|
(a)--(b)--(c)
|
(d)
您可以通过仅将新节点附加到而非叶节点的节点来保证这一点。
至于你关于如何表示图的问题,你的想法会很好,但请记住,你有p个节点,而不是p-1。例如,我可以将我的3节点图表示为:
from
a b c
a 0 1 0
to b 1 0 1
c 0 1 0
请注意这些列:a只通向另一个节点。同样,c只通向另一个节点。然而,b的列显示,b导致两个其他节点(不止一个)。
因此,a和c是叶子;b不是。
如果我添加一个新节点,我只想将其连接到已经有多个节点的节点:
a b c d a b c d
a 0 1 0 0 a 0 1 0 0
b 1 0 1 0 --> b 1 0 1 1
c 0 1 0 0 c 0 1 0 0
d 0 0 0 0 d 0 1 0 0
希望这能有所帮助。
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 在条件变量中触发错误信号的频率是多少
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 图形中有多少节点可访问
- 在一棵有191个节点且高度为9的二叉树中找到一个键所需的最大比较次数是多少?