Black And White (DFS 训练题)
2024-10-15 02:32:51
G - Black And White
=========================================================================================================================
数据范围很小,可以直接用DFS深搜出结果,,但如果不把数据 按升序排好序 就去进行深搜的话,会超时,优先让数量最多的放在前面
然后 如果有一个数字的数量 > (M×N+1)/2 则肯定 输出 NO;因为怎么也不可能不相邻;
设DFS(int y ,int x) 即对这个格子进行染色
=========================================================================================================================
代码:
#include <algorithm>
#include <cstdio>
using namespace std; int Map[][];
int n,m,k,cas=; //行,列,数量,案例几
int flag = ; //判定dfs return条件 struct Node{
int num,s; //颜色编号,该颜色数量
}tail[];
bool cmp(Node a,Node b) { return a.s>b.s;} void print() //输出函数
{
printf("Case #%d:\nYES\n",cas++);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
printf(j==m?"%d\n":"%d ",Map[i][j]);
} void dfs(int y,int x)
{
for(int i =;i<=k;++i)
if(flag==) return;
else if(tail[i].s)
{
if(Map[y-][x]!=tail[i].num&&Map[y][x-]!=tail[i].num)
{
--tail[i].s; //改颜色数量-1;
Map[y][x] = tail[i].num;
if(y==n&&x==m&&flag!=)
{flag = ;print();return;} //如果格子填充完了,则输出
else if(x==m) //如果这一行填充完了,跳转至下一行
dfs(y+,);
else //否则前往这一行的下一个格子
dfs(y,x+);
++tail[i].s;
}
}
}
int main()
{
int T;
scanf("%d",&T); for(int num = ;num<=T;++num)
{
scanf("%d %d %d",&n,&m,&k);
for(int i = ;i<=k;++i)
{
scanf("%d",&tail[i].s);
tail[i].num = i;
}
sort(tail+,tail+k+,cmp);
if(tail[].s>(n*m+)/) {printf("Case #%d:\nNO\n",cas++); continue;}
flag = ;
dfs(,);
}
return ;
}
最新文章
- 通过COOKIE欺骗登录网站后台
- EF方便的添加一条信息...
- LeetCode 笔记24 Palindrome Partitioning II (智商碾压)
- poj 3669 线段树成段更新+区间合并
- input的type属性的修改
- 使用MSBUILD 构建时出错 error MSB3086: Task could not find ";sgen.exe"; using the SdkToolsPath的解决方法
- win10系统调用架构分析
- 阻塞式和非阻塞式IO
- PropertyGird( 属性表格) 组件
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
- 编写简单的辅助脚本来在 Google 表格上记账
- RSEG用法和汇编问号的涵义
- MySql中对Group by后的结果数进行Count
- 使用注解配置Spring
- PHP报错类型
- JavaScript学习笔记之call和apply
- 用Java批量重命名文件
- DevExpress v17.2新版亮点—WPF篇(四)
- 关于Python的那点吐槽
- Log4j记录日志使用方法
热门文章
- Linux下Vue项目搭建karma测试框架
- 【java开发系列】—— 深克隆和浅克隆
- 基于FPGA的HDMI显示设计(三)
- startup ORA-00845: MEMORY_TARGET not supported on this system
- Android下最小化程序到后台代码
- Hello World, S/4HANA for Customer Management 1.0
- Smart template的控件能否当成普通控件来用
- 欢迎来到“火龙族智者”的blog
- [转]Linux学习
- 从OC和C#中找乐趣:相同又不同的delegate