C ++中Bipartite图的最大边数

问题陈述

给定一个整数N,它表示顶点的数量。任务是在N个顶点的二部图中找到最大可能的边数。

二部图

  • 二分图是一个具有2组顶点的图。

  • 该集合使得同一集合中的顶点之间永不共享边。

示例

如果N = 10,则总共有25条边-

  • 两个集合都将包含5个顶点,并且第一集合的每个顶点都将具有第二集合的每个其他顶点的边

  • 因此,总边将为5 * 5 = 25

算法

  • 当给定集合的每个顶点都具有另一集合的每个其他顶点的边缘时,边缘的数量将最大,即edges = m * n其中m和n是两个集合中的边缘数量

  • 为了最大化边的数量,m必须等于或尽可能接近n

  • 因此,可以使用以下公式计算最大边缘数:

            (n * n)/ 4

示例

#include <bits/stdc++.h>
using namespace std;
int getMaxEdges(int n) {
   return floor((n * n) / 4);
}
int main() {
   int n = 7;
   cout << "Maximum edges = " << getMaxEdges(n) << endl;
   return 0;
}

输出结果

当您编译并执行上述程序时。它产生以下输出-

Maximum edges = 12