题目链接:http://poj.org/problem?id=1419
最大独立集等于其补图的最大团,数据有点儿水,直接搜过了。
Code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 128
int map[M][M];
int set[M],vn;
int ans[M],tot;
int n,m;
int Connect(int ix)
{
int i;
for(i=0;i<vn;i++){
if(!map[set[i]][ix])
return 0;
}
return 1;
}
void Find(int ix)
{
int i;
if(n-ix+1+vn<=tot)
return ;
for(i=ix;i<=n;i++){
if(Connect(i)){
set[vn++]=i;
Find(i+1);
vn--;
}
}
if(vn>tot){
tot=vn;
memmove(ans,set,sizeof(set));
}
}
int main()
{
int t;
int i,j;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
memset(map,1,sizeof(map));
while(m--){
scanf("%d%d",&i,&j);
map[i][j]=map[j][i]=0;
}tot=vn=0;
Find(1);
printf("%d\n",tot);
for(i=0;i<tot;i++)
printf(i?" %d":"%d",ans[i]);
puts("");
}
return 0;
}