HDU 5113 Black And White (dfs)
来源:互联网 发布:乘联会销量数据suv 编辑:程序博客网 时间:2024/06/04 19:48
题目链接: 传送门
题意:
给定你一个n*m的格子,然后k种颜色给这个图涂色,要求
相邻的两个格子的颜色不相同(四个方向),而且第i种颜
色恰好出现c[i]次,问能否给这个图涂色成功。
分析:
首先我们考虑一种情况,n*m的格子用一种颜色给他涂色,保
证相邻的格子的颜色不同那么最多可以涂(m*n+1)/2 ,那么
我们搜索的时候可以直接根据这个条件来剪枝了。然后从下
到上一层一层的进行涂色。
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <set>#include <map>#include <queue>#define PB push_back#define MP make_pair#define REP(i,n) for(int i=0;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define DWN(i,h,l) for(int i=(h);i>=(l);--i)#define IFOR(i,h,l,v) for(int i=(h);i<=(l);i+=(v))#define CLR(vis) memset(vis,0,sizeof(vis))#define MST(vis,pos) memset(vis,pos,sizeof(vis))#define MAX3(a,b,c) max(a,max(b,c))#define MAX4(a,b,c,d) max(max(a,b),max(c,d))#define MIN3(a,b,c) min(a,min(b,c))#define MIN4(a,b,c,d) min(min(a,b),min(c,d))#define PI acos(-1.0)#define INF 1000000000#define LINF 1000000000000000000LL#define eps 1e-8#define LL long longusing namespace std;const int maxn = 26;int mp[maxn][maxn];int c[maxn];int n,m,k;bool tag;bool check(int x,int y,int color){//判断是否是不同色 bool flag = true; if(x-1>=1&&mp[x-1][y]==color) flag = false; if(y-1>=1&&mp[x][y-1]==color) flag = false; return flag;}void dfs(int x,int y,int num){//搜索到(x,y)剩余num个格子可以用。 if(tag) return ; FOR(i,1,k){ if(c[i]>(num+1)/2) return; } if(x==n+1){//可以涂到第n+1层的话那么很明显前n层是有解的 tag = true; puts("YES"); FOR(i,1,n){ FOR(j,1,m){ if(j==m) printf("%d\n",mp[i][j]); else printf("%d ",mp[i][j]); } } return ; } FOR(i,1,k){//枚举可以涂的颜色 if(c[i]&&check(x,y,i)){ c[i]--,mp[x][y]=i; if(y==m) dfs(x+1,1,num-1); else dfs(x,y+1,num-1); c[i]++,mp[x][y]=0; } }}int main(){ int t,cas=1; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&k); FOR(i,1,k) scanf("%d",c+i); printf("Case #%d:\n",cas++); tag=false; dfs(1,1,m*n); if(!tag) puts("NO"); } return 0;}
0 0
- HDU 5113 Black And White (dfs)
- HDU 5113 Black And White (dfs)
- HDU 5113 Black And White(DFS)
- HDU 5113 Black And White dfs+剪枝
- HDU 5113 Black And White(dfs)
- hdu 5113 Black And White dfs剪枝
- HDU - 5113 - Black And White(dfs)
- dfs-hdu 5113 Black And White
- HDU 5113 Black And White(DFS)
- HDU 5113 Black And White(暴力dfs+减枝)
- hdu 5113 Black And White (dfs回溯+剪枝)
- hdu 5113 Black And White (dfs+强力剪枝)
- HDU 5113 Black And White(DFS+剪枝)
- Black And White (hdu 5113 dfs+剪枝)
- hdu 5113 Black And White(dfs+剪枝)
- HDU 5113 Black And White (dfs神剪枝)
- 文章标题 HDU 5113 : Black And White (dfs+剪枝)
- HDU 5113 Black And White (dfs、剪枝)
- Linux下用半同步/半反应实现堆线程池
- 修改 Jquery Dialog 的位置
- 论UITableViewController被status bar覆盖的问题(IOS SDK 8.3)
- Android Eclipse关联源码
- 数组、数组操作、无序数组、有序数组、二分法
- HDU 5113 Black And White (dfs)
- 模拟IC流片经验分享
- android 监听数据库ContentObserver使用说明
- 僵尸进程Zombie process
- ActionBarDrawerToggle 使用小结
- 安卓中文本视图TextView的扩展使用
- cx_Oracle.DatabaseError: ORA-00911: invalid character
- SYSTEMTAP安装
- MFC 控件字体样式和颜色设置