非自己出品就是容易wa啊,想了一会没想出来,就忍不住去找答案了,实在没忍住去找答案,结果还是wa了两
次,,,还是自己想的比较靠谱啊,
思路:
如果当前点可以被染成黑色,就把它染成黑色,继续深搜,之后回溯,把它染成白色
如果当前点只能被染成白色,就染成白色深搜
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int map[105][105]; int visit[105]; int ans[105],n,max; void dfs(int cur, int sum) { int i,j; if(cur > n) { if(sum > max) { max = sum; for(i=1; i<=n; i++) ans[i] = visit[i]; } return ; } int flag = 1; for(i=1; i<=n; i++) { if((map[cur][i] == 1) && (visit[i] == 1)) { flag = 0; break; } } if(flag) { visit[cur] = 1; dfs(cur+1, sum+1); visit[cur] = 0; } dfs(cur+1,sum); return ; } int main() { int T,m,i,a,b; scanf("%d",&T); while(T--) { max = 0; memset(visit,0,sizeof(visit)); memset(map,0,sizeof(map)); memset(ans,0,sizeof(ans)); scanf("%d%d",&n,&m); for(i=1; i<=m; i++) { scanf("%d%d",&a,&b); map[a][b] = map[b][a] = 1; } dfs(1,0); printf("%d\n",max); int cnt = 0; for(i=1; i<=n; i++) { if(ans[i] == 1) { printf("%d",i); cnt++; if(cnt != max) printf(" "); } } puts(""); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-09 05:02:01