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 ...
随机推荐
- 一个很好用的侧滑框架ICSDrawerController实现的 QQ 侧滑及换肤功能
使用ICSDrawerController 实现侧滑功能 在ICSDrawerController 第三方上做了修改实现,QQ 点击头像打开关抽屉头像渐变的效果 - (void)hiddenHeadV ...
- zuul忽略表达式
如果有error过滤器,会进入error
- 使用Calendar来获取当前日期和时间
1 package com.java.test; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 6 pub ...
- volley框架下发送和读取cookie
首先volley本身不支持cookie,但是volley又非常好用(比如封装了网络请求的实现,内部支持并发, 不用我们再额外设计网络管理异步处理,网络请求不应在UI线程等等),那既想使用volley又 ...
- Python+selenium之Page Object设计模式
Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...
- linux下杀毒工具clamav
ClamAV 杀毒是Linux平台最受欢迎的杀毒软件,ClamAV属于免费开源产品,支持多种平台,如:Linux/Unix.MAC OS X.Windows.OpenVMS.ClamAV是基于病毒扫描 ...
- exportfs: /mnt/demo requires fsid= for NFS export
解决方法:/mnt/demo 10.0.1.57(fsid=0,rw,async) //加入fsid=0参数就可.
- 功能强大的CURL
linux下的curl,有着非同一般的魔力,有人称它为下载工具,我更倾向于叫它“文件传输工具”因为它好像无所不能.从常见的 FTP, HTTP, TELNET, 等协议,还支持代理服务器,cook ...
- CentOS7 中使用 firewall-cmd 控制端口和端口转发
0X00 firewalld 守护进程 firewall-cmd命令需要firewalld进程处于运行状态.我们可以使用systemctl status/start/stop/restart fire ...
- this经典试题
<body> <div class="container"> <h3>输出内容</h3> <pre> var name ...