C++中图的孤立顶点数最大值和最小值


给定边数Noe和顶点数Nov,目标是找到在没有边和No个顶点计数的图中可能存在的孤立顶点的最小值和最大值。

孤立顶点是没有连接到它的边的顶点。

  • 对于孤立顶点的最小值

我们将确保每条边都是孤立的。(没有两条边具有公共顶点)每条边只需要2个顶点,所以:

非孤立顶点数 = 2 * 边数

孤立顶点数 = 总顶点数 - 非孤立顶点数。

如果顶点数 <= 2 * 边数,则表示所有顶点都连接到一条边。所以孤立顶点数为0。

  • 对于孤立顶点的最大值

为此,我们将尝试创建一个多边形,使得所有边都与最少的顶点连接。当我们有一个多边形,每个顶点对之间也有对角线时,这是可能的。

对于给定的5个顶点和6条边,正方形是一个多边形,它有6条边和2条对角线,因此只有4个顶点被占用。1个顶点成为孤立顶点,这是最大值。

n边多边形中从一个顶点到另一个顶点的对角线条数为n*(n-3)/2。总边数=n*(n-1)/2

输入

No. of vertices 5, edges 6

输出

Minimum isolated vertices 0. Maximum isolated vertices 1.

解释

如上图所示。

输入 - 顶点数2,边数=1

输出 - 孤立顶点的最小值0。孤立顶点的最大值0。

解释 - 边至少由两个顶点形成。

下面程序中使用的算法如下

  • 整数noe和nov包含边数和顶点数。

  • 函数findisolatedvertices(int v, int e) 将边数和顶点数作为参数,并打印可能的孤立顶点的最小值和最大值。

  • 如果顶点数 <= 2*e,则表示没有孤立顶点。否则,非孤立顶点数为2*e(最大值),所以最小孤立顶点数为v-2*e。

  • 为了计算孤立顶点的最大值,从i=1开始到顶点数,如果(i * (i - 1) / 2 >= e)则中断,因为只有i个顶点足以构成e条边。

  • i存储可能的最大孤立顶点数。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
void findisolatedvertices(int v, int e){
   //one edge has 2 vertices
   if (v <= 2 * e) //means all veritces have a connected edge
      cout << "Minimum no. of isolated vertices: " << 0 << endl;
   else {
      int niso=2*e; //maximum non isolated vertices
      cout << "Minimum no. of isolated vertices: " << v - niso << endl;
   }
   // To find out maximum number of isolated
   // vertices
   // Loop to find out value of number of
   // vertices that are connected
   int i;
   for (i = 1; i <= v; i++) {
      if (i * (i - 1) / 2 >= e)
         break;
   }
   cout <<endl<< "Maximum no. of isolated vertices: " <<v-i;
}
int main(){
   // Number of vertices
   int nov = 5;
   // Number of edges
   int noe = 2;
   // Calling the function to maximum and
   // minimum number of isolated vertices
   findisolatedvertices(nov, noe);
   return 0;
}

输出

Minimum no. of isolated vertices: 1
Maximum no. of isolated vertices: 2

更新于:2020年8月3日

396次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告