PAT-A1142 Maximal Clique (25分)

题目描述:
A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the clique are adjacent. A maximal clique is a clique that cannot be extended by including one more adjacent vertex. (Quoted from https://en.wikipedia.org/wiki/Clique_(graph_theory))

Now it is your job to judge if a given subset of vertices can form a maximal clique.

输入格式:
Each input file contains one test case. For each case, the first line gives two positive integers Nv (≤ 200), the number of vertices in the graph, and Ne, the number of undirected edges. Then Ne lines follow, each gives a pair of vertices of an edge. The vertices are numbered from 1 to Nv.

After the graph, there is another positive integer M (≤ 100). Then M lines of query follow, each first gives a positive number K (≤ Nv), then followed by a sequence of K distinct vertices. All the numbers in a line are separated by a space.

输出格式:
For each of the M queries, print in a line Yes if the given subset of vertices can form a maximal clique; or if it is a clique but not a maximal clique, print Not Maximal; or if it is not a clique at all, print Not a Clique.

输入样例:
8 10
5 6
7 8
6 4
3 6
4 5
2 3
8 2
2 7
5 3
3 4
6
4 5 4 3 6
3 2 8 7
2 2 3
1 1
3 4 3 6
3 3 2 1

输出样例:
Yes
Yes
Yes
Yes
Not Maximal
Not a Clique

题意:
给出一个无向图的顶点数Nv和边数Ne,并给出对应的联结边,结点编号为1-Nv。再给出查询数M,判断M个序列是否为Maximal Clique。
在Clique中,所有的结点两两都是连通的。
Maximal Clique除了满足是Clique的要求,还要满足不可被扩展的条件,即在1-Nv的结点中,没有出现在这个序列中的结点,不可能与该序列中的每一个结点都两两连通。

思路:
首先判断一个序列是否是Clique,即序列中的每个结点是否两两连通,这里我使用了邻接矩阵的方式,因为这样可以直接判断两个点有没有连通,而不用循环去查找一个数。
判断一个Clique是否是Maximum Clique,我采用的方法是判断是否有不是这个序列的结点能够和这个序列中的每个结点都两两连通。
详见代码~

参考代码:

#include <stdio.h>
int Nv, Ne, m; //顶点数,无向边数,查询数量 
const int maxv = 210;
bool G[maxv][maxv] = {false};

int checkClique(int seq[], int k){
	bool inSeq[Nv+1] = {false};
	for(int i = 0; i < k; i++){
		int st = seq[i];
		inSeq[st] = true;
		for(int j = i + 1; j < k; j++){
			int ed = seq[j];
			if(!G[st][ed]) return 0; //Not a Clique
		}
	}
	//寻找是否有其他结点可以和这个Clique组成一个更大的Clique
	for(int i = 1; i <= Nv; i++){ 
		if(inSeq[i] == false){
			int cnt = 0; //有几对联结 
			for(int j = 0; j < k; j++){
				int now = seq[j];
				if(G[i][now]) cnt++; //找到这两者的联结 
			}
			if(cnt == k) return 2; //Not Maximal 
		}
	}
	return 1; //Yes
}

int main(){
	scanf("%d%d", &Nv, &Ne);
	for(int i = 0; i < Ne; i++){
		int st, ed;
		scanf("%d%d", &st, &ed);
		G[st][ed] = true;
		G[ed][st] = true;
	}
	scanf("%d", &m);
	for(int i = 0; i < m; i++){
		int k; //每次查询的结点数
		scanf("%d", &k);
		int seq[k];
		for(int j = 0; j < k; j++){
			scanf("%d", &seq[j]);
		} 
		int flag = checkClique(seq, k);
		if(flag == 0){
			printf("Not a Clique\n");
		}else if(flag == 1){
			printf("Yes\n");
		}else{
			printf("Not Maximal\n");
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值