地址 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的更多相关文章

  1. 算法问题实战策略 PICNIC

    下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC ...

  2. 《算法问题实战策略》-chaper7-穷举法

    关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者 ...

  3. 《算法问题实战策略》-chaper32-网络流

    基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...

  4. 《算法问题实战策略》-chaper13-数值分析

    这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解 ...

  5. 《算法问题实战策略》——chaper9——动态规划法技巧

    Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1)    拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2)    棋盘中还剩 ...

  6. 《算法问题实战策略》-chaper8-动态规划法

    Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...

  7. 《算法问题实战策略》-chaper21-树的实现和遍历

    这一章节开始介绍一个数据结构中的一个基本概念——树. 我们从数据结构的解读来解释树结构的重要性,现实世界的数据除了最基本的线性结构(我们常用队列.数组和链表等结构表征),还有一个重要的特性——层级结构 ...

  8. 算法问题实战策略 QUADTREE

    地址 https://algospot.com/judge/problem/read/QUADTREE 将压缩字符串还原后翻转再次压缩的朴素做法 在数据量庞大的情况下是不可取的 所以需要在压缩的情况下 ...

  9. 算法问题实战策略 DICTIONARY

    地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...

随机推荐

  1. springboot整合web开发(整合servlet、filter、listener、访问静态、文件上传)

    整合servlet 1.继承HttpServlet 2.添加@WebServlet注解 @WebServlet(name="FirstServlet",urlPatterns=&q ...

  2. Redis缓存NoSQL

    下面是一些关于Redis比较好的文章,因为篇幅较大,我就将其折叠起来了.不太喜欢分不同的笔记去记载,除非真的很多很多.所以本文不仅要对Redis做简单的介绍,还要分别介绍Redis中的五种结构,并会贴 ...

  3. CSRF漏洞原理浅谈

    CSRF漏洞原理浅谈 By : Mirror王宇阳 E-mail : mirrorwangyuyang@gmail.com 笔者并未深挖过CSRF,内容居多是参考<Web安全深度剖析>.& ...

  4. Dynamics 365利用Web API对视图进行查询

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. iOS中去除重复的数据

    本人只用了其中一个功能: 需求:一个已知数组arr,判断一个新字符str是否已经存在于arr中,如果不存在,则存入数组arr中 //去重 if (![arr containsObject:str]) ...

  6. UILable中划线和下划线

    //中划线 NSDictionary *attribtDic = @{NSStrikethroughStyleAttributeName: [NSNumber numberWithInteger:NS ...

  7. 短信相关的AT指令以及信令

    本文链接:https://blog.csdn.net/sjz4860402/article/details/78552756 此次的短信AT指令和信令从以下几个方面介绍: 一 . 短信AT指令的格式二 ...

  8. TCP安全,SYN Flooding 和 nmap

    目录 SYN flooding nmap nmap idle SYN flooding 简介:向target持续发送SYN=1的TCP报文,使target因内存满而拒绝服务. 命令:netwox 76 ...

  9. Linux系统学习 十六、VSFTP服务—本地用户访问—基本用户基础配置

    缺点,ftp密码是和系统密码是一致的,并不安全 先设置两个测试用户 test1      123123 test2      123123 基本用户基础配置 1.本地用户基本配置 local_enab ...

  10. Spring 中的观察者模式

    一.Spring 中观察者模式的四个角色 1. 事件(ApplicationEvent) ApplicationEvent 是所有事件对象的父类.ApplicationEvent 继承自 jdk 的 ...