判断是否图中任意两点两两相连,并判断是否存在图外一点与图中任意一点均存在连线
本题坑点如下
1,注意条件判断,一个一个依次判断;
整体代码如下
#include<bits/stdc++.h>
using namespace std;
set<int>s;
vector<int>temp;
int vis[210];
int G[210][210];
int isc,ismc,noc;
int main(){
int nv,ne,m,k,num;
int v1,v2;
scanf("%d%d",&nv,&ne);
for(int i=0;i<ne;i++){
scanf("%d%d",&v1,&v2);
G[v1][v2]=G[v2][v1]=1;
}
scanf("%d",&m);
for(int i=0;i<m;i++){
temp.clear();
isc=ismc=0;
noc=0;
int hash[210];
fill(hash,hash+210,0);
scanf("%d",&k);
for(int l=0;l<k;l++){
scanf("%d",&num);
temp.push_back(num);
hash[num]=1;
}
for(int l=1;l<=nv;l++){
for(int m=1;m<=nv;m++){
if(hash[l]==1&&hash[m]==1&&m!=l&&G[m][l]!=1){
noc=1;
continue;}
}
if(noc==1)continue;}
if(noc==1){printf("Not a Clique\n");
continue;}
else {int cnt;
for(int l=1;l<=nv;l++){
if(hash[l]==0)
{ cnt=0;
for(int p=0;p<temp.size();p++){
if(G[l][temp[p]]==1)cnt++;
}
if(cnt==temp.size()){isc=1;
continue;}
}
}
if(isc==1){printf("Not Maximal\n");
continue;}
printf("Yes\n");
}
}
}