PAT甲级 1142 Maximal Clique (25分) 图/C++
2020-06-24 04:26
387 查看
1142 Maximal Clique (25分)
题目大意:找到两两相连的最大clique。
需要先判断是否两两相连(首先需要满足的条件,必须先判定),确定是两两相连以后再判断是否为最大clique
#include<iostream> #include<vector> using namespace std; int n,m; int a[201][201]={0};//使用领接矩阵存放边 vector<int> check; void isClique(int flag[],int kn); int main(){ #ifdef ONLINE_JUDGE //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入 #else freopen("1.txt", "r", stdin); //从1.txt输入数据 #endif cin>>n>>m; for(int i=0;i<m;i++){ int x,y; cin>>x>>y; a[x][y]=a[y][x]=1; } int k; cin>>k; int *flag=new int[n+1]; for(int i=0;i<k;i++){ int kn;cin>>kn; fill(flag,flag+n+1,0); check.resize(kn); for(int j=0;j<kn;j++){ cin>>check[j]; flag[check[j]]=1; } isClique(flag,kn); } return 0; } void isClique(int flag[],int kn){ for(int i=0;i<kn;i++){//循环kn次 for(int j=i+1;j<kn;j++){//从i+1开始,不需要再重复判断和前面的是否相连 if(a[check[i]][check[j]]==0) //不相连,说明不是一个clique { cout<<"Not a Clique"<<endl; return ; } } for(int j=1;j<=n;j++){ if(flag[j]==0&&a[check[i]][j]==1){//判断其它相连的点 int k=0; for(;k<kn;k++){ if(a[check[k]][j]==0)break;//和集合中的点并不是两两相连 } if(k>=kn){//和集合中的点两两相连,因此不是最大的clique cout<<"Not Maximal"<<endl; return ; } }//if }//for(j=1;j<=n;j++) }//for(i=0;i<kn;i++) cout<<"Yes"<<endl; return ; }
相关文章推荐
- PAT 甲级 1142 Maximal Clique (25分)
- PAT 甲级 1142 Maximal Clique (25 分)
- PAT甲级 1125 Chain the Ropes (25分) 贪心/C++
- PAT甲级 1137 Final Grading (25分) set+map/C++
- PAT甲级 1134 Vertex Cover (25分) hash/C++
- C++ PAT甲级 1006 Sign In and Sign Out (25分)
- PAT甲级 1129 Recommendation System (25分) set/C++
- C++ PAT甲级1117 Eddington Number (25分)
- PAT甲级 1149 Dangerous Goods Packaging (25分) map/C++
- PAT甲级 1121 Damn Single (25分) set/C++
- C++ PAT甲级 1002 A+B for Polynomials (25分)
- PAT甲级 1126 Eulerian Path (25分) DFS/C++
- PAT甲级 1150 Travelling Salesman Problem (25分) C++
- PAT甲级 1153 Decode Registration Card of PAT (25分) map/C++
- PAT甲级 1154 Vertex Coloring (25分) map/C++
- PAT-A1142 Maximal Clique 题目内容及题解
- PAT甲级 1133 Splitting A Linked List (25分) C++
- PAT甲级 1141 PAT Ranking of Institutions (25分) map/C++
- C++ PAT甲级 1010 Radix (25分)(一个超时,24分)
- C++ PAT乙级1065 单身狗 (25分)