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. C++算法代码——众数

    好久没更新了-- 题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1615 题目描述 N 个 1 到 30000 间无序数正整数,其中 ...

  2. JVM必不可少的知识

    1.Java垃圾回收机制 对象被判断为垃圾的标准:没有被其他对象引用 2.判断对象是否可被回收 (1)引用计数算法 判断对象的引用数量 通过判断对象的引用数量来决定对象是否可以被回收 每个对象实例都有 ...

  3. Maven报错:Unsupported major.minor version 51.0

    这个错误时因为JDK版本的问题,比如本机的JDK为1.6,但是项目编译时用的JDK为1.7那么就会出现这个异常,因为本机JDK版本较低不能执行编译版本为高版本的Class文件,各JDK版本对应的错误编 ...

  4. ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

    ConcurrentHashMap线程安全的,允许一边更新.一边遍历,也就是说在对象遍历的时候,也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,而如果用Hash ...

  5. Java基础语法:static修饰符

    一.静态变量 描述: 在类中,使用'static'修饰的成员变量,就是静态变量,反之为非静态变量. 区别: 静态变量属于类的,可以使用类名来访问:非静态变量是属于对象的,必须使用对象来访问. 静态变量 ...

  6. EFCodeFirst属性映射约定

    EFCodeFirst属性映射约定 EFCodeFirst 属性映射约定 CodeFirst与数据表之间得映射方式又两种:Data Annotation和Fluent API 默认约定: 表名为类名的 ...

  7. Go benchmark 一清二楚

    前言 基准测试(benchmark)是 go testing 库提供的,用来度量程序性能,算法优劣的利器. 在日常生活中,我们使用速度 m/s(单位时间内物体移动的距离)大小来衡量一辆跑车的性能,同理 ...

  8. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  9. SpringMVC-02 第一个SpringMVC程序

    SpringMVC-02 第一个SpringMVC程序 第一个SpringMVC程序 配置版 新建一个Moudle , springmvc-02-hello,确定依赖导入进去了 1.配置web.xml ...

  10. rest framework Request

    要求 如果你正在做基于REST的Web服务的东西......你应该忽略request.POST. -马尔科姆Tredinnick,Django开发组 REST框架的Request类继承了标准HttpR ...