题目描述
n 个人参加某项特殊考试。
为了公平,要求任何两个认识的人不能分在同一个考场。
求是少需要分几个考场才能满足条件。
输入描述
输出描述
输出一行一个整数,表示最少分几个考场。
输入输出样例
输入:
5
8
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
输出:
4
最终代码
1. c/c++
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int a[N][N];
int p[N][N];
int num = N;
int n,m;
void dfs(int x, int cnt)
{
if (cnt >= num) return;
if (x == n + 1)
{
num = min(num, cnt);
return;
}
int j, k;
for (j = 1; j <= cnt; j++)
{
k = 0;
while (p[j][k] && !a[x][p[j][k]])
k++;
if (p[j][k] == 0)
p[j][k] = x, dfs(x + 1, cnt), p[j][k] = 0;
}
p[j][0] = x;
dfs(x + 1, cnt + 1);
p[j][0] = 0;
}
int main()
{
cin>>n>>m;
for (int i = 1; i <= m; i++)
{
int u,v;
cin >> u >>v;
a[u][v] = a[v][u] = 1;
}
dfs(1, 1);
cout <<num;
return 0;
}
过程理解
|