C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

グラフの頂点被覆を見つけるためのヒューリスティックを実装するC++プログラム


グラフの頂点被覆は、グラフ内のMとNを接続するすべてのエッジについて、MまたはN(または両方)がVに存在するように、頂点Vのセットを見つけることです。このプログラムでは、ヒューリスティックを実装してグラフの頂点被覆。

アルゴリズム

Begin
   1) Initialize a set S as empty.
   2) Take an edge E of the connecting graph Say M and N.
   3) Add both vertex to the set S.
   4) Discard all edges in the graph with endpoints at M or N.
   5) If some edge is still left in the graph Go to step 2,
   6) Print the final set S is a vertex cover of the graph.
End

#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
bool v[11110];
int i,j;
vector<int> sol_vertex(int n,int e) {
   vector<int> S;
   for(i=0;i<n;i++) {
      if(!v[i]) {
         for(j=0;j<(int)g[i].size();j++) {
            if(!v[g[i][j]]) {
               v[i]=true;
               v[g[i][j]]=true;
               break;
            }
         }
      }
   }
   for(i=0;i<n;i++)
      if(v[i])
   S.push_back(i);
   return S;
}
int main() {
   int n,e,a,b;
   cout<<"Enter number of vertices:";
   cin>>n;
   cout<<"Enter number of Edges:";
   cin>>e;
   g.resize(n);
   memset(v,0,sizeof(v));
   for(i=0;i<e;i++) {
      cout<<"Enter the end-points of edge "<<i+1<<" : ";
      cin>>a>>b;
      a--; b--;
      g[a].push_back(b);
      g[b].push_back(a);
   }
   vector<int> S = sol_vertex(n,e);
   cout<<"The required vertex cover is as follows:\n";
   for(i=0;i<(int)S.size();i++)
      cout<<S[i]+1<<" ";
   return 0;
}

出力:

Enter number of vertices:4
Enter number of Edges:5
Enter the end-points of edge 1 : 2 1
Enter the end-points of edge 2 : 3 2
Enter the end-points of edge 3 : 4 3
Enter the end-points of edge 4 : 1 4
Enter the end-points of edge 5 : 1 3
The required vertex cover is as follows:
1 2 3 4

  1. 与えられたグラフのブリッジエッジの数を見つけるためのC++プログラム

    n個の頂点とm個のエッジを含む重み付けされていない無向グラフが与えられたとします。グラフのブリッジエッジは、グラフを削除するとグラフが切断されるエッジです。与えられたグラフでそのようなグラフの数を見つける必要があります。グラフには、平行なエッジや自己ループは含まれていません。 したがって、入力がn =5、m =6、edges ={{1、2}、{1、3}、{2、3}、{2、4}、{2、5}、{3 、5}}の場合、出力は1になります。 グラフには、{2、4}のブリッジエッジが1つだけ含まれています。 これを解決するには、次の手順に従います- mSize := 100 Define an

  2. グラフのエッジカバーを計算するC++プログラム

    グラフの頂点の数がnの場合、タスクはグラフのエッジカバーを計算することです。エッジカバーは、グラフのすべての頂点をカバーするために必要なエッジの最小数を見つけることです。 n=5のように その場合、そのグラフは次のようになります- したがって、そのエッジカバーは3 nが8である別の例を見てみましょう そして、そのエッジカバーは次のようになります:4 例 Input: n= 5 Output: 3 Input: n= 8 Output: 4 以下で使用されるアプローチは次のとおりです − ユーザーからの入力を受け取ります 頂点の数の結果の上限値を2.0