题意:

给出一个字符矩阵,问能否是不超过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;
}

最新文章

  1. JAVA中static关键字
  2. 利用loadrunner代理方式,录制手机APP脚本
  3. Android的图片缓存ImageCache(转)
  4. immutableJS一些API
  5. Spring-MVC流程图
  6. 团队小组开发nabc分析
  7. desc跟asc
  8. 杂烩:QWidget、QGraphics、QtQuick
  9. centos下Elasticsearch数据迁移与备份
  10. HDOJ(HDU) 1587 Flowers(水、、)
  11. NET Core 1.0 RC2
  12. 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
  13. [Swift]LeetCode1035.不相交的线 | Uncrossed Lines
  14. SpringBoot整合Jsp和Thymeleaf (附工程)
  15. Java SE之字符串常量池
  16. centos6.8 yum安装mysql 5.6 (完整)
  17. 【Python】新建自定义个数的自定义长度名字
  18. Asterisk1.8 转码策略分析
  19. Unity 3D连接MySQl数据库
  20. Flask接通微信公众号

热门文章

  1. Java的常量接口思考,项目中的常量是放在接口里还是放在类里呢?
  2. 十六进制和ASCII之间的转换
  3. Java基础语法(自定义类、ArrayList集合)
  4. java项目定时任务实现
  5. C#调用C++接口返回字符串的做法
  6. Java TCP通信
  7. Spark性能调优之道——解决Spark数据倾斜(Data Skew)的N种姿势
  8. javascript日期函数
  9. 1968: C/C++经典程序训练6---歌德巴赫猜想的证明
  10. 剑指offer38 数字在排序数组中出现的次数