LA 3790 Overlapping Squares DFS
题意:
给出一个字符矩阵,问能否是不超过6个2×2的正方形组成的。
分析:
每次找一个最表面的正方形然后DFS就好了。
一个正方形被移开后,用一个特殊符号标记上,下次再匹配的时候就直接忽略这些位置。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
char square[10][10] = {
" _ _ ",
"| |",
"|_ _|"
};
struct Graph
{
string g[5];
bool Read() {
getline(cin, g[0]);
if(g[0][0] == '0') return false;
for(int i = 1; i < 5; i++) getline(cin, g[i]);
return true;
}
void print() {
for(int i = 0; i < 5; i++) cout << g[i] << endl;
}
bool Remove(int x, int y) {
for(int i = 0; i < 3; i++)
for(int j = 0; j < 5; j++) {
if(i == 0 && (j == 0 || j == 2 || j == 4)) continue;
if(g[x+i][y+j] == square[i][j]) g[x+i][y+j] = '*';
else if(g[x+i][y+j] != '*') return false;
}
return true;
}
bool check() {
for(int i = 0; i < 5; i++)
for(int j = 0; j < 9; j++)
if(g[i][j] != '*' && g[i][j] != ' ')
return false;
return true;
}
}G[10];
bool DFS(int d) {
if(G[d].check()) return true;
if(d == 6) return false;
for(int i = 0; i <= 2; i++)
for(int j = 0; j <= 4; j++) {
G[d+1] = G[d];
if(G[d+1].Remove(i, j))
if(DFS(d+1)) return true;
}
return false;
}
int main()
{
//freopen("in.txt", "r", stdin);
int kase = 1;
while(G[0].Read()) {
printf("Case %d: %s\n", kase++, DFS(0) ? "Yes" : "No");
}
return 0;
}
LA 3790 Overlapping Squares DFS的更多相关文章
- UVA - 12113 Overlapping Squares(dfs+回溯)
题目: 给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出这样的形状. 思路: dfs纸的张数,每一张中枚举这张纸左上角这个点的位置,暴力解题就可以了. 这个题的覆盖太 ...
- [Lintcode]Word Squares(DFS|字符串)
题意 略 分析 0.如果直接暴力1000^5会TLE,因此考虑剪枝 1.如果当前需要插入第i个单词,其剪枝如下 1.1 其前缀(0~i-1)已经知道,必定在前缀对应的集合中找 – 第一个词填了ball ...
- UVA-12113 Overlapping Squares (回溯+暴力)
题目大意:问能不能用不超过6张2x2的方纸在4x4的方格中摆出给定的图形? 题目分析:暴力枚举出P(9,6)种(最坏情况)方案即可. 代码如下: # include<iostream> # ...
- LA 7272 Promotions(dfs)
https://vjudge.net/problem/UVALive-7272 题意: 公司要提拔人,现在有n个人,现在有m条有向边,A->B表示A的表现比B好,也就是如果B晋升了,那么A肯定会 ...
- LA 6450 social advertising(dfs剪枝)
6450 Social AdvertisingYou have decided to start up a new social networking company. Other existing ...
- LA 2797 平面区域dfs
题目大意:一个平面区域有n条线段,问能否从(0,0)处到达无穷远处(不穿过任何线段) 分析:若两条线段有一个端点重合,这种情况是不能从端点重合处穿过的 的.因此对每个端点延长一点,就可以避免这个问题. ...
- 【习题 7-6 UVA - 12113】Overlapping Squares
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先预处理出来一个正方形. 然后每次枚举新加的正方形左上角的坐标就可以. 注意覆盖的规则,控制一下就可以. 然后暴力判断是否相同. 暴 ...
- UVA - 12113 Overlapping Squares(重叠的正方形)
题意:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出指定的形状. 分析:2*2的纸在4*4的棋盘上总共有9种放置位置,枚举所有的放置位置即可.枚举情况总共种. #p ...
- UVA 12113 Overlapping Squares
题意: 总共有6个2*2的正方形,判断是否能够成所给的形状. 思路: 一个正方形总共有9种摆放方式,对于整个地图来说摆放方式总共有2的9次方种摆放方式.然后将地图用9*5的数组表示,正方形的位置用其8 ...
随机推荐
- Linux mount实际使用
查看所有文件系统(设备):fdisk -l 1.当要重新挂载一个文件系统时(设备):可以直接 #mount -o remount,rw /dev/sdb9/(文件系统) /mnt/sdb9/(目录) ...
- Mac下安装ElasticSearch及其插件
目录 环境介绍 安装过程 安装Kibana 环境介绍 软件版本:ElasticSearch7.0.0 Kibana7.0.0 系统环境:mac 环境 安装过程 官网下载 ElasticSearch7. ...
- vijos 1320 清点人数
背景 NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去.由于NK中学的学生很多,在火车开之前必须清点好人数. 描述 初始时,火车上没有学生:当同学们开始上火车时,年级主任从第一节车厢出 ...
- UOJ #205/BZOJ 4585 【APIO2016】Fireworks 可并堆+凸包优化Dp
4585: [Apio2016]烟火表演 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 115 Solved: 79[Submit][Status] ...
- 使用JS的画布制作一个瞄准镜
<canvas width="600" height="500" id="myCanvas"></canvas> & ...
- ajax的dataType有哪些类型?
ajax的dataType有哪些类型? 格式为:dataType:"xxx", •"xml": 返回 XML 文档,可用 jQuery 处理 •"ht ...
- 用简单的语言描述C++ 是什么?
用简单的语言描述C++ 是什么? 答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛.C++支持多种编程范式 --面向对象编程.泛型编程和过程化编程. 其编程领域众广,常用于系统开发,引 ...
- Bootstrap历练实例:标签页内的下拉菜单
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- UITableView上添加按钮,按钮点击效果延迟的解决办法
在自定义的TableView的初始化方法做如下操作 - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame: ...
- vc文件操作汇总—支持wince
一.判断文件及文件夹是否存在 // 判断文件是否存在 BOOL IsFileExist(const CString& csFile) { DWORD dwAttrib = GetFileAtt ...