题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色。已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法。

最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时。本来以为搜索不行,看别人给的思路就是搜索+剪枝。
但是一直不知道该怎么剪,看了解题报告才发现,剩下的格子的数量+1必需是剩余最多种类棋子的两倍,否则必定会有相邻存在。
例如 3*3的空格中,一类棋子最多只能占5个、

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; int num[20];
int tmap[10][10];
int n,m,k;
bool dfs(int x,int y)
{
for(int i = 1; i <= k; i++)
if((n*m-(m*(x-1)+y-1)+1)/2<num[i])
return false;
for(int i = 1; i <= k; i++)
{
bool flag = true;
if(y - 1>= 1)
{
if(tmap[x][y-1] == i)
flag = false;
}
if(x - 1>= 1)
{
if(tmap[x-1][y] == i)
flag = false;
}
if(num[i] > 0 && flag)
{
tmap[x][y] = i;
num[i]--;
if(x == n && m == y)
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;
}
num[i]++;
tmap[x][y] = -1;
}
}
return false;
} int main()
{
int T;
scanf("%d",&T);
int cas = 1;
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
for(int i = 1; i <= k; i++)
scanf("%d",&num[i]);
memset(tmap,-1,sizeof(tmap));
printf("Case #%d:\n",cas++);
if(dfs(1,1))
{
printf("YES\n");
for(int i=1; i<=n; i++)
{
for(int j=1; j<m; j++)
printf("%d ",tmap[i][j]);
printf("%d\n",tmap[i][m]);
}
}
else
printf("NO\n");
}
return 0;
}

  

最新文章

  1. Android数据存储之Android 6.0运行时权限下文件存储的思考
  2. eclipse配置maven
  3. Beta-1阶段成员贡献分(代组长更新)
  4. jQuery构造函数init参数分析(二)
  5. TOMCAT如何建立两个端口或服务
  6. 线程池(C#)
  7. Android中ListView同过自定义布局并使用SimpleAdapter的方式实现数据的绑定
  8. memset和fill_n区别
  9. linux云服务器常用设置
  10. hdu 1878 无向图的欧拉回路
  11. sql server 死锁排查
  12. TF:Tensorflow结构简单应用,随机生成100个数,利用Tensorflow训练使其逼近已知线性直线的效率和截距—Jason niu
  13. java高级工程师开放面试题集&lt;二&gt;
  14. Performance Tuning MySQL
  15. input全选与单选(把相应的value放入隐藏域去)
  16. 使用unity3d和tensorflow实现基于姿态估计的体感游戏
  17. Android——检测TXT文件中是否含有双字节字符
  18. Java基础知识 Set
  19. 如何获取token值
  20. Cisco交换机配置VLAN与TRUNK

热门文章

  1. Tornado websocket应用
  2. 利用yield 实现Xrange功能
  3. SpaceVim - 让你的vim变得更加高效和强大
  4. JAVA_SE基础——72.自定义线程
  5. JAVA_SE基础——70.Math类
  6. JAVA_SE基础——55.自定义异常类
  7. 怎么用DreamWare新建立一个静态网站的站点
  8. 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
  9. python 判断变量是否是 None 的三种写法
  10. JMM简介