【笔记】《算法竞赛入门》习题7-6 UVa12113_重叠的正方形
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_重叠的正方形的更多相关文章
- 【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应
title: 习题7-3 UVa211_多米诺效应 date: 2021-01-29 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa 题目: 使用28个多米 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...
随机推荐
- docker08容器监控工具-WeaveScope
容器监控工具WeaveScope 一 背景 在生成环境中k8s应用部署众多,需要一款可视化工具方便日常获知集群的实时状态,并为故障排查提供及时和准确的数据支持. weavescope支持docker和 ...
- TcaplusDB服务体系揭秘
导言 TcaplusDB是腾讯出品的分布式NoSQL数据库,存储和调度的代码完全自研.具备缓存+落地融合架构.PB级存储.毫秒级时延.无损水平扩展和复杂数据结构等特性.同时具备丰富的生态.便捷的迁移. ...
- java list集合遍历时删除元素
转: java list集合遍历时删除元素 大家可能都遇到过,在vector或arraylist的迭代遍历过程中同时进行修改,会抛出异常java.util.ConcurrentModification ...
- Linux基本命令——系统管理和磁盘管理
转: Linux基本命令--系统管理和磁盘管理 Linux命令--系统管理和磁盘管理 一.系统管理 1.1 时间相关指令 <1> 查看当前日历: cal <2> 显示或设置时间 ...
- AQS源码解读(ReentrankLock的公平锁和非公平锁)
构建Debug代码: 1 package com.hl.interview.lock; 2 3 import java.util.Scanner; 4 import java.util.concurr ...
- jQuery实现游戏推荐
1.需求:点击添加游戏按钮实现添加游戏,点击删除按钮,删除游戏. 2.实现思路:分别给添加按钮和删除按钮添加click事件. 3.遇到的问题:自己添加的游戏不能进行删除. 4.原因分析:文档加载完毕后 ...
- 剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针
剑指 Offer 57. 和为s的两个数字 Offer_57 题目详情 使用二分法 package com.walegarrett.offer; /** * @Author WaleGarrett * ...
- PAT-1145(Hashing - Average Search Time)哈希表+二次探测解决冲突
Hashing - Average Search Time PAT-1145 需要注意本题的table的容量设置 二次探测,只考虑正增量 这里计算平均查找长度的方法和书本中的不同 #include&l ...
- STM32 ADC详细篇(基于HAL库)
一.基础认识 ADC就是模数转换,即将模拟量转换为数字量 l 分辨率,读出的数据的长度,如8位就是最大值为255的意思,即范围[0,255],12位就是最大值为4096,即范围[0,4096] l ...
- 每日一题20201112(922. 按奇偶排序数组 II)
题目链接: 922. 按奇偶排序数组 II 思路 很简单,搞懂问题的核心就行,假设现在有奇数在偶数位上,偶数在奇数位上. 那么我们要做的就是,找到分别在对方位置上的数字,然后交换他们就行. class ...