算法问题实战策略 BOARDCOVER
地址 https://algospot.com/judge/problem/read/BOARDCOVER


解法
DFS 最近似乎在简单DFS上花费太多时间了
首先扫描地图 统计可覆盖的元素个数 如果不是3的倍数 那肯定不能覆盖完全 返回0
然后进行DFS 尝试各种覆盖办法 一共12种(由于必须覆盖完所有元素 就规定从左上角开始覆盖,其实可以只有四种覆盖办法)

每次DFS结束则覆盖方法增加1种 尝试所有覆盖方式后 函数也返回
注意需要寻找每次下一个尝试的覆盖点 规定从左上角开始找起
代码
// 11111111111111.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include <iostream>
#include <vector> using namespace std; const int N = ; char gmap[N][N]; int loop;
int ans = ;
int n, m; struct board {
int x1, y1;
int x2, y2;
int x3, y3;
}; vector<struct board> fillBoad=
{
{,, -,, ,-},
{,, ,, ,-},
{,, -,, ,},
{,, ,, ,}, {,, ,, ,-},
{,, -,, -,-},
{,, ,, ,},
{,, -,, -,}, {,, ,, -,},
{,, ,, ,},
{,, ,-, ,-},
{,, ,-, --},
}; bool CheckXY(int x1, int y1, int x2, int y2, int x3, int y3)
{
if (x1 < || y1 < || x2 < || y2 < || x3 < || y3 < )
return false; if (x1 >= n || x2 >= n || x3 >= n || y1 >= m || y2 >= m || y3 >= m)
return false; if (gmap[x1][y1] == '#' || gmap[x2][y2] == '#' || gmap[x3][y3] == '#')
return false; return true;
} void DFS(int x, int y,int needfill)
{
if (needfill == ) {
ans++;
return;
} for (; x < n; x++) {
for ( y = ; y < m; y++) {
if (gmap[x][y] == '.')
goto FIND;
}
}
FIND: for (int i = ; i < ; i++) { int newx1 = x + fillBoad[i].x1;
int newy1 = y + fillBoad[i].y1;
int newx2 = x + fillBoad[i].x2;
int newy2 = y + fillBoad[i].y2;
int newx3 = x + fillBoad[i].x3;
int newy3 = y + fillBoad[i].y3; if (CheckXY(newx1, newy1, newx2, newy2, newx3,newy3)) {
gmap[newx1][newy1] = '#';
gmap[newx2][newy2] = '#';
gmap[newx3][newy3] = '#';
needfill -= ; int p = x; int q = y;
for (; p < n; p++) {
for ( q = ; q < m; q++) {
if (gmap[p][q] == '.')
goto FIND1;
}
} FIND1: DFS( p,q, needfill); needfill += ;
gmap[newx1][newy1] = '.';
gmap[newx2][newy2] = '.';
gmap[newx3][newy3] = '.'; }
} return;
} int main()
{
cin >> loop; while (loop--)
{
cin >> n >> m; memset(gmap,,N*N);
ans = ; int count = ;
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
cin >> gmap[i][j];
if (gmap[i][j] == '.')
count++;
}
} if (count % != ){
cout << << endl;
continue;
} DFS(,,count);
cout << ans << endl;
} return ;
}
ac

算法问题实战策略 BOARDCOVER的更多相关文章
- 算法问题实战策略 PICNIC
下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC ...
- 《算法问题实战策略》-chaper7-穷举法
关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者 ...
- 《算法问题实战策略》-chaper32-网络流
基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...
- 《算法问题实战策略》-chaper13-数值分析
这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解 ...
- 《算法问题实战策略》——chaper9——动态规划法技巧
Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1) 拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2) 棋盘中还剩 ...
- 《算法问题实战策略》-chaper8-动态规划法
Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...
- 《算法问题实战策略》-chaper21-树的实现和遍历
这一章节开始介绍一个数据结构中的一个基本概念——树. 我们从数据结构的解读来解释树结构的重要性,现实世界的数据除了最基本的线性结构(我们常用队列.数组和链表等结构表征),还有一个重要的特性——层级结构 ...
- 算法问题实战策略 QUADTREE
地址 https://algospot.com/judge/problem/read/QUADTREE 将压缩字符串还原后翻转再次压缩的朴素做法 在数据量庞大的情况下是不可取的 所以需要在压缩的情况下 ...
- 算法问题实战策略 DICTIONARY
地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...
随机推荐
- List<string>和string[]数组之间的相互转换,需要的朋友可以参考下
1,从System.String[]转到List<System.String> System.String[] str={"str","string" ...
- linux下的服务器上传与下载
上传 scp 文件 用户名@服务器ip 服务器保存路径 例如:scp bookmarks_2019_6_24.html root@192.168.0.103:/home 下载 scp 用户名@服务器i ...
- 2019QM大作业2-weyl半金属Landau Level
目录 说明 for cnblog QM大作业2--weyl半金属的Landau Level \(\boldsymbol{Abstract}\) 说明 Landau Level 自旋与pauli mat ...
- Dynamics 365需要的最小的权限用来更改用户的业务部门和角色
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- mysql 写入中文乱码
今天从另一个系统往mysql数据库写入数据,发现中文变成了????? 检查数据库的设置 ,server对应字符集是latinl 调整mysql参数配置,配置文件目录/etc/mysql/mysql.c ...
- ORACLE 12.2RAC之问题 ora.chad OFFLINE
问题描述: 早上巡检是发现一套RAC的ora.chad一个节点的状态是offline,其他的均正常. crsctl stat res -t ora.chad ONLINE ...
- DSP编程与调试总结
(1)error: can't allocate .ebss, size 000c450d (page 1) in DXINTFRAM2 (avail: 00010000) error: errors ...
- 计算机网络基础笔记 运输层协议UDP/TCP
目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...
- windows和linux下查看java安装路径
windows下查看版本:(默认安装路径安装就不需要去配环境变量了) java -version windows下查看安装路径: java -verbose Linux下安装版本查看方式和window ...
- 关于ajax请求不到后台页面提示400 bad request的问题
解决方法一: 在contrller控制器中对应方法的 @RequestMapping注解中添加 method="RequestMethod.POST"属性