UVA193图染色问题
2015-10-03 22:38
483 查看
这题是一个简单题,可是有个地方我不太明白,我的递归刚开始好像写残了,
写成这样就不对:
当时不知道怎么想的,黑的标记成1,白的标记成-1,然后就错了,应该是对于递归理解的还不够深刻,
这样递归的话好像每次到最后一层的时候,vis数组就全部变成0了。
写成这样就不对:
if(ok) { vis[u]=1; dfs(u+1,sum+1); vis[u]=0; } vis[u]=-1; dfs(u+1,sum); vis[u]=0;
当时不知道怎么想的,黑的标记成1,白的标记成-1,然后就错了,应该是对于递归理解的还不够深刻,
这样递归的话好像每次到最后一层的时候,vis数组就全部变成0了。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <set> #include<cmath> #include<climits> #include<vector> #include<cfloat> using namespace std; const int P = 1e9 + 7; const int N=2000; int n,k; vector<int> v[110]; int G[110][110]; bool vis[110]; bool t[110]; int ans; void dfs(int u,int sum) { if(u==n+1) { if(sum>ans) { ans=sum; memcpy(t,vis,sizeof(vis)); } return; } int ok=1; for(int i=0;i<(int)v[u].size();i++) { int tem=v[u][i]; if(vis[tem]==1) { ok=0; break; } } if(ok) { vis[u]=1; dfs(u+1,sum+1); vis[u]=0; } dfs(u+1,sum); } int main() { int m; cin>>m; while(m--) { cin>>n>>k; for(int i=1;i<=n;i++) v[i].clear(); memset(G,0,sizeof(G)); ans=0; for(int i=0;i<k;i++) { int a,b; cin>>a>>b; v[a].push_back(b); v[b].push_back(a); } memset(vis,0,sizeof(vis)); dfs(1,0); cout<<ans<<endl; int first=1; for(int i=1;i<=n;i++) if(t[i]==1) { if(first) { cout<<i; first=0; } else cout<<' '<<i; } cout<<endl; } return 0; }
相关文章推荐
- 2015第40周六
- 汇编语言
- 大话数据结构--排序
- 关于findviewbyid
- 搜索二维矩阵 II
- Spring MVC 解读——@RequestMapping
- hdu 1430 魔板
- Hive笔记四:Hive的组件和工作流程
- Spring AOP概念
- SQL 基础
- Spring MVC 解读---<context:component-scan/>
- 网站用户存在状态的session用法及例子
- 为什么还是有很多人都选择NATIVE APP
- 利用树集进行数据排序
- 分词算法的python实现(正向最大匹配法)
- MySQL索引背后的数据结构及算法原理
- eclipse主题颜色配置
- jQuery时间轴插件:jQuery Timelinr
- 数据库之Oracle
- Hive笔记三:基本操作