C++ 程序解决支配集问题

c++server side programmingprogramming更新于 2024/11/4 6:33:00

这是一个 C++ 程序解决支配集问题。

算法

开始
   以顶点和边的数量作为输入。同时取边的边点。
   functiondominant():
      声明向量集。
      取连接顶点(即 X 和 Y)的任意边 e 图。
      在 X 和 Y 之间添加一个顶点以设置 s。
     删除所有与 X 相连的边。
结束

示例

#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
bool visit[10001];
int i,j;
vector<int>dominant(int v,int e) {
   vector<int> Set;
   //取连接顶点(即 X 和 Y)的任意边 e 图。
   for(i=0;i<v;i++) {
      if(!visit[i]) {
         Set.push_back(i); //添加顶点
         visit[i]=true;
         for(j=0;j<(int)g[i].size();j++) {
            if(!visit[g[i][j]]) {
               visit[g[i][j]]=true;
               break;
            }
         }
      }
   }
   return Set;
}
int main() {
   int v,e,a,b;
   cout<<"Enter number of vertices:";
   cin>>v;
   cout<<"Enter number of Edges:";
   cin>>e;
   g.resize(v);
   memset(visit,0,sizeof(visit)); //set all index value of an array as 0
   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> Set = dominant(v,e);
   cout<<"The Dominant Set is:\n";
   for(i=0;i<(int)Set.size();i++)
      cout<<Set[i]+1<<" ";
   return 0;
}

输出

Enter number of vertices:7
Enter number of Edges:6
Enter the end-points of edge 1 : 1 2
Enter the end-points of edge 2 : 2 2
Enter the end-points of edge 3 : 3 4
Enter the end-points of edge 4 : 4 5
Enter the end-points of edge 5 : 6 7
Enter the end-points of edge 6 : 4 5
The Dominant Set is:
1 3 5 6

相关文章