感觉是学长的博客,因为看到了一句话:有些事们不是因为看到了希望才去坚持,而是坚持了才会看到希望。
这个是深搜的题目,然后就是枚举每一个点的黑白情况,黑用1表示,核心是递归。
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,maze[110][110],node[110];
int temp[110],max,mm;
int isok(int cur)
{
for(int i=1;i<=n;i++)
if(maze[cur][i]&&node[i])
return 0;
return 1;
}
void dfs(int cur)
{
if(cur==n+1)
{
mm=0;
for(int i=1; i<=n; i++)
{
if(node[i])
mm++;
}
if(mm>max)
{
for(int i=1,j=0; i<=n; i++)
if(node[i])
temp[j++]=i;
max=mm;
}
}
else
{
node[cur]=0;
dfs(cur+1);
node[cur]=1;
if(isok(cur))
dfs(cur+1);
node[cur]=0;
}
}
int main()
{
/*freopen("in.txt","r",stdin);*/
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d %d",&n,&k);
memset(maze,0,sizeof(maze));
memset(node,0,sizeof(node));
for(int i=0; i<k; i++)
{
int a,b;
scanf("%d%d",&a,&b);
maze[a][b]=maze[b][a]=1;
}
max=0;
dfs(1);
printf("%d\n",max);
for(int i=0;i<max-1;i++)
printf("%d ",temp[i]);
printf("%d\n",temp[max-1]);
}
return 0;
}