Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 그래프의 최대 및 최소 격리 정점

<시간/>

모서리 수 Noe와 정점 수 Nov가 주어집니다. 목표는 모서리가 없고 정점 수가 없는 그래프에서 가능한 최소 및 최대 고립 정점 수를 찾는 것입니다.

격리된 정점은 연결된 가장자리가 없는 정점입니다.

  • 최소 격리 정점의 경우

우리는 모든 가장자리가 격리되었는지 확인합니다. ( 두 모서리에는 공통 정점이 없습니다 ) 각 모서리에는 2 개의 정점만 필요합니다. 그래서,

분리되지 않은 정점 수 =2 * 아니요. 가장자리

고립된 정점의 수 =총 정점 - 고립되지 않은 정점의 수.

아니오. 정점의 수는 <=2 * no입니다. 모서리 수는 모든 정점에 모서리가 연결되어 있음을 의미합니다. 격리된 정점의 개수는 0입니다.

  • 최대 격리 정점용

이를 위해 우리는 모든 가장자리가 최소 정점으로 연결되도록 다각형을 만들려고 합니다. 각 정점 쌍이 그들 사이에 대각선을 갖도록 다각형이 있을 때 가능합니다.

C++에서 그래프의 최대 및 최소 격리 정점

5개의 꼭짓점과 6개의 모서리가 있는 경우 정사각형은 4개의 꼭짓점만 차지하도록 2개의 대각선이 있는 6개의 모서리가 있는 다각형입니다. 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.

설명 - 2개 이상의 꼭지점 사이에 에지가 형성된다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수 no와 nov는 no를 포함합니다. 가장자리와 꼭짓점.

  • findisolatedvertices(int v, int e) 함수는 모서리와 꼭짓점을 매개변수로 취하고 가능한 최소 및 최대 격리 꼭짓점을 인쇄합니다.

  • 아니오. 정점의 수는 <=2*e이며, 고립된 정점이 없음을 의미합니다. 다른 격리되지 않은 정점은 2*e(최대)이므로 최소 격리는 v-2*e가 됩니다.

  • 최대 격리 정점을 계산하려면 i=1에서 시작하여 no로 설정합니다. (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