码迷,mamicode.com
首页 > 其他好文 > 详细

1142 Maximal Clique

时间:2018-08-31 21:07:50      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:定义   ==   size   lag   集合   ret   break   eof   int   

题意:给出一个图,定义这样一个结点子集subset,若subset中的任意两结点不都相邻,则称之为Not a Clique;若subset中的任意两结点都相邻,则称之为Clique;若subset中的结点不仅都相邻,而且不存在subset之外的点与subset中的每个结点都相邻,则称之为Maximal。

思路:首先,判断待查询的结点是否都相邻;其次,判断是不是Maximal。怎么判断呢?遍历所有subset之外的结点(可以用vis[]数组来表示,标记subset[]里的结点为true,这样就只会访问非subset的点了),只要存在这样一个结点v,使得v与subset中的每个结点都相邻,则说明subset不是Maximal。

代码:

#include <cstdio>
#include <cstring>
const int maxn=205;
int graph[maxn][maxn]={0};
int subset[maxn];//存放每次检查的结点
int vis[maxn];//标记在集合中出现过的结点
int n,m;

int main()
{
    scanf("%d%d",&n,&m);
    int u,v;
    while(m--){
        scanf("%d%d",&u,&v);
        graph[u][v]=graph[v][u]=1;
    }
    int query,k;
    scanf("%d",&query);
    while(query--){
        scanf("%d",&k);
        memset(vis,0,sizeof(vis));//每次查询前记得初始化
        for(int i=0;i<k;i++){
            scanf("%d",&subset[i]);
            vis[subset[i]]=1;
        }

        int flag=1;//1->Yes; 0->Not Maximal; -1->Not a Clique
        //1.检验是不是Clique
        for(int i=0;i<k;i++){
            if(flag==-1) break;
            for(int j=i+1;j<k;j++){
                if(graph[subset[i]][subset[j]]==0) {
                        flag=-1;
                        break;
                }
            }
        }
        if(flag==-1){
            printf("Not a Clique\n");
            continue;
        }
        //2.检验是不是Maximal
        for(int v=1;v<=n;v++){
            if(vis[v]) continue;
            vis[v]=1;
            int i=0;
            for(;i<k;i++)
                if(graph[v][subset[i]]==0) break;
            if(i==k){
                flag=0;//但凡存在一个不是subset中的结点使得该结点与subset中的每个结点都相连,说明它不是Maximal
                break;
            }
        }//for
        if(flag==1) printf("Yes\n");
        else printf("Not Maximal\n");
    }
    return 0;
}

 

1142 Maximal Clique

标签:定义   ==   size   lag   集合   ret   break   eof   int   

原文地址:https://www.cnblogs.com/kkmjy/p/9567601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!