题目描述
n个人参加某项特殊考试。
为了公平,要求任何两个认识的人不能分在同一个考场。
求是少需要分几个考场才能满足条件。
输入描述
输入格式:
第一行,一个整数 n(1≤n≤100),表示参加考试的人数。
第二行,一个整数 m,表示接下来有 m行数据。
以下 m行每行的格式为:两个整数 a,b用空格分开 ( 1≤a,b≤n )表示第 a个人与第 b个人认识。
输出描述
输出一行一个整数,表示最少分几个考场。
解题思路
1. 安排考场的情况,但是没有规定每个考场的人数,所以可以从第1个考场开始,逐个加入考生,每新加入一个x,先在已有的房间中寻找是否认识,认识则换个考场,直到找到一个考场都不认识。
2.如果找不到,就新开一个考场,新来的x就坐第一个。
def dfs(x,room): #第x个人,第room考场
global p,num
if room>num:return # 搜索的考场数比局部最优解还要大,直接剪枝
if x>n: # 找完所有人
if room<num:# 更新最优解
num=room
return
for j in range(1,room+1): # 试着将x分配到已有的考场
k=0
while p[j][k] and a[x][p[j][k]]==0:k+=1 #找到可行的座位
if p[j][k]=&