博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LA 3790 Overlapping Squares DFS
阅读量:5265 次
发布时间:2019-06-14

本文共 1633 字,大约阅读时间需要 5 分钟。

题意:

给出一个字符矩阵,问能否是不超过6个2×2的正方形组成的。

分析:

每次找一个最表面的正方形然后DFS就好了。

一个正方形被移开后,用一个特殊符号标记上,下次再匹配的时候就直接忽略这些位置。

#include 
#include
#include
#include
#include
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;}

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4868581.html

你可能感兴趣的文章
简单的异步函数async/await例子
查看>>
一个点击事件引发的案件
查看>>
Android.mk介绍
查看>>
【Demo】动态库创建示例
查看>>
The 2014 ACMICPC Asia Regional Xian Online
查看>>
oracle 触发器
查看>>
json 字符串转成对象
查看>>
中国省市地区数据库
查看>>
jQuery $.extend()用法总结
查看>>
octave基本操作
查看>>
排球计分程序重构(一)
查看>>
go 文件上传
查看>>
axure学习点
查看>>
javascript: 处理URL字符串
查看>>
MATLAB数值计算与数据分析(2)
查看>>
JUnit
查看>>
WPF文本框只允许输入数字[转]
查看>>
事务的四种隔离级别和七种传播行为
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
Denver Broncos nfl jersey authentic considering alot more
查看>>