HDU 5113 Black And White(搜索+剪枝)
来源:互联网 发布:视频广告过滤 知乎 编辑:程序博客网 时间:2024/05/14 17:27
题意:给你一个不超过5X5的矩阵,有k种颜色,每种颜色有c[i]个,问可不可以把格子颜色涂满并且相邻格子的颜色不相同
思路:DFS搜索,不过会超时,留意到一个剪枝就是如果当前没有涂色的格子数目/2比最多还没涂的颜色数量小的话就可以直接返回了,因为肯定会相邻了
#include<bits\stdc++.h>using namespace std;int n,m,k;int mp[6][6];int color[50];bool check(int x,int y,int c){if (x-1>=1 && mp[x-1][y]==c)return false;if (y-1>=1 && mp[x][y-1]==c)return false;return true;}bool dfs(int x,int y){for (int i = 1;i<=k;i++)if ((n*m-(m*(x-1)+y-1)+1)/2<color[i])return false;for (int i = 1;i<=k;i++){if (color[i]>0 && check(x,y,i)){color[i]--;mp[x][y]=i;if (x==n && y==m)return true;if (y+1<=m){if (dfs(x,y+1))return true;}else{if (x+1<=n){if (dfs(x+1,1))return true;}}color[i]++;mp[x][y]=-1;}}return false;}int main(){ int T,cas=1; scanf("%d",&T); while(T--){memset(mp,-1,sizeof(mp));printf("Case #%d:\n",cas++);scanf("%d%d%d",&n,&m,&k);for (int i = 1;i<=k;i++)scanf("%d",&color[i]);if (dfs(1,1)){puts("YES");for (int i = 1;i<=n;i++){for (int j = 1;j<m;j++)printf("%d ",mp[i][j]);printf("%d\n",mp[i][m]);}}elseputs("NO");}}
0 0
- HDU 5113 Black And White(搜索剪枝)
- HDU 5113 Black And White (搜索剪枝)
- HDU 5113 Black And White(搜索+剪枝)
- HDU 5113 Black And White(搜索+剪枝)
- 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+剪枝)
- 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、剪枝)
- hdu 5113 Black And White(dfs+剪枝)
- hdu 5113 Black And White(深搜+剪枝)
- HDU 5113 Black And White(深搜+剪枝)
- hdu 5113 Black And White (dfs+强力剪枝)
- Android之SurfaceView简介(一)
- HDU 5112 A Curious Matt
- 最新python中一升级所有已安装的包方法
- POJ 2431 Expedition
- Percona Xtrabackup myql 快速备份与恢复
- HDU 5113 Black And White(搜索+剪枝)
- 15. 3Sum
- CSR8670脱机运行后串口通信异常
- Problem-O
- 神奇的 BlocksKit (一)
- NKOI 1008 核电站
- java Io流中对象序列化和反序列问题
- Tarjan三大算法之强连通分量
- js事件之event.preventDefault()与event.stopPropagation()用法区别