http://poj.org/problem?id=1419显然的最大独立集,我晕啊,最大团没有学好啊,没有真正理解清楚
哎哎
模版题,最大独立集:
#include<stdio.h>
#include<string.h>
#include<math.h>
int map[100][100],x[100],b[100];
int n,m,max,now;
int dfs(int i)
{
int j,flag;
if (i>n)
{
for (j=1; j<=n ; j++ ) x[j]=b[j];
max=now;
return 0;
}
flag=1;
for (j=1; j<i ; j++ )
if (b[j]&&map[i][j]) //这里如果改为!map[i][j]就是求最大团了。。。。
{
flag=0;
break;
}
if (flag)
{
b[i]=1;
now++;
dfs(i+1);
now--;
b[i]=0;
}
if (now+n-i>max)
{
b[i]=0;
dfs(i+1);
}
}
int main()
{
int i,j,t,x1,x2,flag;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
memset(map,0,sizeof(map));
for (i=1; i<=m ; i++ )
{
scanf("%d%d",&x1,&x2);
map[x2][x1]=map[x1][x2]=1;
}
max=0;now=0;
dfs(1);
printf("%d\n",max);
flag=0;
for (i=1; i<=n ; i++ )
if (x[i])
{
if (flag)
printf(" ");
printf("%d",i);
flag=1;
}
printf("\n");
}
return 0;
}