最大独立集,NP完全问题,考暴力搜索,不用优化就能过 输出间没有空行 #include<stdio.h> #include<string.h> #define BLACK 1 #define WHITE 0 #define UNDEFINED -1 bool g[100][100]; int n,m,ans,rec[100],count; char color[100]; void search(int x) { color[x]=BLACK;count++; int stack[100],top=0; for(int i=0;i<n;i++) if(g[x][i] && color[i]==UNDEFINED) { color[i]=WHITE; stack[top++]=i; } bool find=false; for(int i=0;i<n;i++) if(color[i]==UNDEFINED) { search(i); find=true; } if(!find && ans<count) { ans=count; for(int i=0;i<n;i++) rec[i]=color[i]; } color[x]=UNDEFINED;count--; for(int i=0;i<top;i++) color[stack[i]]=UNDEFINED; } void solve() { ans=0; count=0; for(int i=0;i<n;i++) { memset(color,UNDEFINED,sizeof(color)); search(i); } } void output() { printf("%d/n",ans); bool first=true; for(int i=0;i<n;i++) if(rec[i]==BLACK){ if(first)first=false;else putchar(' '); printf("%d",i+1); } putchar(10); } int main() { //freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int times; scanf("%d",×); while(times--) { memset(g,false,sizeof(g)); int a,b; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); // printf("%d %d/n",a,b); a--;b--; g[a][b]=g[b][a]=true; } solve(); output(); } }