title: 习题7-6 UVa12113_重叠的正方形

date: 2021-01-31 19:08:00

categories:

  • 算法竞赛入门

tags:

  • 数据结构
  • 算法
  • UVa

《算法竞赛入门》习题7-6 UVa12113_重叠的正方形

思路:

题目要求用6个长为2的正方形描绘输入的正方形边缘,如果可以描绘,输出yes,否则no

我用一个三维数组描述图形,比如G[i][j][k]表示以i,j点上k方向有边,k取值为0或者1,分别表示右和下

dfs函数设计为寻找遍历路径上没有被遍历过的点作为左上角描绘一个正方形,如果深度大于6返回false

如果通过judge则返回true,如果叶子返回true,也返回true,具体页末看代码,代码结构清晰

原题:

[UVA-12113][https://vjudge.net/problem/UVA-12113]

//
// Created by hsby on 2021/1/31.
// #include <iostream>
#include <cstring>
using namespace std; const int maxn = 5; enum {RIGHT = 0, DOWN = 1};
int G[maxn][maxn][2];
int GT[maxn][maxn][2];
int vis[maxn-1][maxn-1]; bool judge(){
for (int i = 0; i < maxn; ++i) {
for (int j = 0; j < maxn; ++j) {
for (int k = 0; k < 2; ++k) {
if (G[i][j][k] && !GT[i][j][k]){
return false;
}
}
}
}
return true;
} void draw(int x, int y){
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
// 描绘水平方向的边
if (i != 1 && j < 2) GT[x+i][y+j][RIGHT] += 1;
// 描绘竖直方向的边
if (j != 1 && i < 2) GT[x+i][y+j][DOWN] += 1;
}
}
} void erase(int x, int y){
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (i != 1 && j < 2) GT[x+i][y+j][RIGHT] -= 1;
if (j != 1 && i < 2) GT[x+i][y+j][DOWN] -= 1;
}
}
} bool dfs(int x, int y, int d){
if (judge()) return true;
if (d > 6) {
return false;
}
for (int i = 0; i < maxn-2; ++i) {
for (int j = 0; j < maxn-2; ++j) {
if (vis[i][j]) continue;
vis[i][j] = 1;
draw(i, j);
if (dfs(i, j, d+1)) return true;
erase(i, j);
vis[i][j] = 0;
}
}
return false;
} int main(){ int T = 1;
string line;
while (cin.peek() != '0'){
memset(G, 0, sizeof(G));
memset(GT, 0, sizeof(GT));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < maxn; ++i) {
getline(cin, line);
for (int j = 0; line[j] != '#'; ++j) {
int tj = j/2;
if (line[j] == '|'){
G[i-1][tj][DOWN] = 1;
}
if (line[j] == '_'){
G[i][tj][RIGHT] = 1;
}
}
}
printf("CASE %d: ", T++);
if (dfs(0, 0, 1)) cout << "Yes" << endl;
else cout << "No" << endl;
} return 0;
}

【笔记】《算法竞赛入门》习题7-6 UVa12113_重叠的正方形的更多相关文章

  1. 【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应

    title: 习题7-3 UVa211_多米诺效应 date: 2021-01-29 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa 题目: 使用28个多米 ...

  2. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  3. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  4. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  5. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  6. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  7. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  8. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  9. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

随机推荐

  1. Angular性能优化实践——巧用第三方组件和懒加载技术

    应该有很多人都抱怨过 Angular 应用的性能问题.其实,在搭建Angular项目时,通过使用打包.懒加载.变化检测策略和缓存技术,再辅助第三方组件,便可有效提升项目性能. 为了帮助开发者深入理解和 ...

  2. JDK源码阅读-DirectByteBuffer

    本文转载自JDK源码阅读-DirectByteBuffer 导语 在文章JDK源码阅读-ByteBuffer中,我们学习了ByteBuffer的设计.但是他是一个抽象类,真正的实现分为两类:HeapB ...

  3. InnoDB 的记录结构和页结构

    本文转载自InnoDB 的记录结构和页结构 概述 InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,中页的大小一般为16KB.也就是在一般情况下,一次最少从磁盘中读取16KB的内 ...

  4. java: 程序包javax.servlet.http不存在

    下载好apache tomcat,将lib目录下的servlet-api.jar导入idea即可

  5. python的基本运算符

    目录 基本运算符 1.算术运算符 2.比较运算符 3.赋值运算符 4.逻辑运算符 5.身份运算符 6.位运算符 7.成员运算符 基本运算符 1.算术运算符 运算符 描述 实例 + 加-两个对象相加 a ...

  6. JavaFX桌面应用-版本升级

    好久没有写博客,2021年就以 "JavaFX桌面应用-版本升级" 开篇吧,记录一下JavaFX应用版本升级的开发流程. 桌面应用升级的方案应该很多,这里只是自己想到的方案. 1. ...

  7. 剑指 Offer 35. 复杂链表的复制

    剑指 Offer 35. 复杂链表的复制 Offer_35 题目详情 方法一 可以使用一个HashMap来存储旧结点和新结点的映射. 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next ...

  8. LeetCode-在受污染的二叉树中查找元素

    在受污染的二叉树中查找元素 LeetCode-1261 /** * 给出一个满足下述规则的二叉树: * root.val == 0 * 如果 treeNode.val == x 且 treeNode. ...

  9. pytorch(14)权值初始化

    权值的方差过大导致梯度爆炸的原因 方差一致性原则分析Xavier方法与Kaiming初始化方法 饱和激活函数tanh,非饱和激活函数relu pytorch提供的十种初始化方法 梯度消失与爆炸 \[H ...

  10. Amazon Connect 配置ccp端的soft phone配置(客服坐席工作站配置)

    本文参考:  Amazon Connect 配置ccp端的soft phone配置(客服坐席工作站配置) [官网]:https://aws.amazon.com/cn/connect/ 应用场景 在应 ...