算法问题实战策略 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字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...
随机推荐
- Provide Several View Variants for End-Users 为最终用户提供多个视图变体
In this lesson, you will learn how to provide several customized variants of the same View, and allo ...
- js自带的对数组中的操作
这篇是我自己总结的,是我自己平常使用的不是很多的数组方法,而且都是js自带的,像大家经常使用的push.pop方法就没写里面.废话不多说,直接看代码 <!DOCTYPE html> < ...
- linux下通过命令连接wifi
故事背景:我司是做新零售的,机器支持4G.wifi.网线,可能会涉及到网络的切换和连接 项目需求:用户在web端输入wifi名称和密码,客户端可以通过服务端下发的信息进行连接 技术调研:之前提到过nm ...
- PWA 学习笔记(三)
基础技术简介 Promise: 1.ES6 引入的一种异步编程的解决方案,通过 Promise 对象来提供统一的异步状态管理方法 2.一般在使用 Promise 对象的时候,首先需要对其进行实例化 3 ...
- RHEL5.6静默安装oracle11.2.0数据库实例脚本
脚本:单实例静默安装echo '[GENERAL] RESPONSEFILE_VERSION = "11.2.0" //查看虚拟机的版本,不能更改 OPERATION_TYPE = ...
- Windows 10 神州网信版
一.版本介绍:官网链接:http://document.cmgos.com/release_notes/release_notes_V0_H 下载链接:请自行百度Windows 10 神州网信政府版( ...
- VS2017初学者如何打开右侧的解决方案资源管理器
- swoole为什么不能代替nginx
Swoole不能代替Apache和Nginx这些通用的HTTP服务器. 但基于Swoole开发的PHP应用不依赖Apache和Nginx也能提供生产级别的HTTP服务. 有需要学习交流的友人请加入交流 ...
- 这可能是最漂亮的Spring事务管理详解
事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...
- IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 HTML基础标签
指引 网页中的信息主要是以文本为主的,可以通过字体.大小.颜色.底纹.边框等来设置文本的属性.文字版面的编辑包括文本标签和格式标签两种,在浏览器中显示的文字内容和格式都要在<body>标记 ...