C++中最大化图中不属于任何边的节点数
给定一个包含节点和边的图,目标是找到可能连接到图的任何边的最大节点数。我们知道,节点数始终小于或等于完全图中的边数。
我们将通过尝试创建一个完全图来实现这一点,如果节点数为n,则将有n(n-1)/2条边。
边数 = n(n-1)/2 (其中n为节点数)
2 * 边数 = n(n-1)。一旦n(n-1) > 边数,我们就有了额外的节点。所以从i=1迭代到i=n。
直到i(i-1) > 2 * 边数。返回n-i作为结果。
让我们通过例子来理解:
**输入** - 节点数=5,边数=2
**输出** - 图中不属于任何边的最大节点数为:2
**解释** -
2条边至少可以有3个节点,最多可以有4个节点。
对于3个节点,没有边的最大剩余节点数=2
**输入** - 节点数=2,边数=1
**输出** - 图中不属于任何边的最大节点数为:0
**解释** -
至少需要2个节点才能构成一条边。在这种情况下,两个节点都被占用。没有剩余节点。
下面程序中使用的算法如下:
我们使用两个变量nodes和edges来存储可用数据。
函数maximum(int nodes, int edges) 将节点数和边数作为参数,并返回图中不属于任何边的最大节点数。
使用变量i,temp和max。
从i=0开始循环,直到i<=nodes
计算temp = i*(i-1)
计算变量total为2*edges
当temp大于total时,中断循环
计算max为max = nodes - i
返回结果max。
示例
#include <bits/stdc++.h> using namespace std; int maximum(int nodes, int edges){ int i, temp = 0, max; for (i = 0; i <= nodes; i++){ temp = i * (i - 1); int total = 2* edges; if (temp >= total){ break; } } max = nodes - i; return max; } int main(){ int nodes = 10; int edges = 5; cout<<"Maximize number of nodes which are not part of any edge in a Graph are:"<<maximum(nodes, edges) << endl; }
输出
如果运行以上代码,将生成以下输出:
Maximize number of nodes which are not part of any edge in a Graph are: 6
广告