蓝桥杯 - 历届试题 分考场(DFS)
发布日期:2021-07-01 00:16:21
浏览次数:2
分类:技术文章
本文共 1154 字,大约阅读时间需要 3 分钟。
题目链接:
时间限制:1.0s 内存限制:256.0MB问题描述
n个人参加某项特殊考试。
为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式
第一行,一个整数n(1<n<100),表示参加考试的人数。
第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式
一行一个整数,表示最少分几个考场。
样例输入
5
8 1 2 1 3 1 4 2 3 2 4 2 5 3 4 4 5 5 10 1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5
样例输出
4
5
解题思路
数据比较小,直接DFS就行了。在已知的状态下,然后去判断下一个学生是否可以在之前存在的教室,如果不可以的话,那么就新开一个教室。
#include#include int n, min_kes, p[102][102], map[102][102];void DFS(int x, int kes){ if (kes >= min_kes) return ; if (x > n) { if (kes < min_kes) min_kes = kes; return ; } for (int i = 1; i <= kes; i++) { int k = 0; while (p[i][k] && !map[x][p[i][k]]) k++; if (!p[i][k]) { p[i][k] = x; DFS(x + 1, kes); p[i][k] = 0; } } p[kes + 1][0] = x; DFS(x + 1, kes + 1); p[kes + 1][0] = 0;}int main(){ int t, a, b; scanf("%d%d", &n, &t); min_kes = n; while (t--) { scanf("%d%d", &a, &b); map[a][b] = map[b][a] = 1; } DFS(1, 0); printf("%d\n", min_kes); return 0;}
转载地址:https://lzyws739307453.blog.csdn.net/article/details/86768576 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年05月01日 12时06分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux 查看分区和文件大小
2019-04-30
Not using PCAP_FRAMES 解释(snort中)
2019-04-30
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Camera驱动调试小记
2019-04-30
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30
安装openrave 0.9的各种依赖包
2019-05-01
@FeignClient注解的重复名称解决
2019-05-01
java.net.BindException: 无法指定被请求的地址
2019-05-01
scala list
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android生命周期
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01
【接口自动化】
2019-05-01