#include <iostream>
using namespace std;
const int MAXV = 1000;
const int INF = 1000000000;
int n, G[MAXV][MAXV], res = INF, cun[MAXV][MAXV], cnt[MAXV] = {0};
bool vis[MAXV] = {false};
void DFS(int u, int depth)
{
if(depth >= res)
return;
if(u > n) {
res = depth;
return;
}
for(int i = 0; i < depth; i++) {
int len = cnt[i];
int c = 0;
for(int j = 0; j < len; j++) {
if(G[u][cun[i][j]] == INF)
c++;
}
if(c == len){
cun[i][cnt[i]++] = u;
DFS(u+1, depth);
cnt[i]--;
}
}
cun[depth][cnt[depth]++] = u;
DFS(u+1, depth+1);
cnt[depth]--;
}
int main()
{
int m, a, b;
cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
G[i][j] = G[j][i] = INF;
}
}
for(int i = 0; i < m; i++) {
cin >> a >> b;
G[a][b] = G[b][a] = 1;
}
DFS(1,0);
cout << res << endl;
return 0;
}
原文链接:https://blog.csdn.net/qys27182812/article/details/84311655?ops_request_misc=&request_id=7340b93fb4a4415685381caf416ca51e&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-21-84311655-null-null.268%5Ev1%5Econtrol&utm_term=%E6%91%A9%E6%89%98%E8%BD%A6%E8%80%83%E5%9C%BA