toj 4317 多连块拼图

时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
总提交: 40 测试通过:21

描述

多连块是指由多个等大正方形边与边连接而成的平面连通图形。 ———— 维基百科

给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成。小多连块只能平移,不能旋转或者翻转。两个小多连块不得重叠。左下图是一个合法的拼法,但右边两幅图都非法。中间那幅图的问题在于其中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块画在右下方)。

输入

输入最多包含 20 组测试数据。每组数据第一行为两个整数 n 和 m(1<=m<=n<=10)。以下 n 行描述大多连块,其中每行恰好包含 n 个字符或者.,其中表示属于多连块,.表示不属于。以下 m 行为小多连块,格式同大多连块。输入保证是合法的多连块(注意,多连块至少包含一个正方形)。输入结束标志为 n=m=0。

输出

对于每组测试数据,如果可以拼成,输出 1,否则输出 0。

样例输入

4 3
.**.


.**.
….
**.
.**

3 3


.


*..
*..
**.
4 2


….
….
….
*.
*.
0 0

样例输出

1
0
0

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;
char small[10][10], big[10][10];
int x1, y1, x2, y2, n, m;/**获得大多连块的第一个‘*’位置
*/
void get_big() {bool flag = true;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (big[i][j] == '*') {x1 = i;y1 = j;flag = false;break;}}if (!flag) break;}
}/**获得小多连块的第一个‘*’位置
*/
void get_small() {bool flag = true;//m为小多连块的宽度for (int i = 0; i < m; i++) {for (int j = 0; j < m; j++) {if (small[i][j] == '*') {x2 = i;y2 = j;flag = false;break;}}if (!flag) break;}
}/**判断是否全部匹配
*/
bool judge() {//n为大多连块的宽度for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)if (big[i][j] == '*')return false;return true;
}/**匹配过程
*/
int sovle() {get_small();while (!judge()) {//获取大多连块的第一个‘*’的位置get_big();//m是小多连块的宽度for (int i = 0; i < m; i++)for (int j = 0; j < m; j++) {if (small[i][j] == '*') {//关键就是这里,用小连块的位置去匹配大连块的位置if (big[x1 + i - x2][y1 + j - y2] == '*')big[x1 + i - x2][y1 + j - y2] = '.';else//小连块中出现中出现‘*’而大连块中未出现则一定会消除不干净return 0;}}}return 1;
}int main() {int i, j;while (scanf("%d%d", &n, &m) && n && m) {//将大多连块录入二维数组中for (i = 0; i < n; i++)scanf("%s", big[i]);//将小多连块录入二维数组中for (j = 0; j < m; j++)scanf("%s", small[j]);//输出结果printf("%d\n", sovle());}return 0;
}

toj 4317 多连块拼图相关推荐

  1. zcmu-1644 多连块拼图

    C - 多连块拼图 多连块是指由多个等大正方形边与边连接而成的平面连通图形. -- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能平移,不能旋 ...

  2. 打工人赚钱的另外四块拼图 | 赚钱游戏

    这是一个关于如何赚钱的系列. 一个工作了十多年的程序员,用了三年时间尝试各种可以赚钱的项目,陆陆续续整理了十万余字的内容,于是就产生了这个系列. 我是谁 你好,我是星夜,一个已经工作了十多年的程序员. ...

  3. 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件

    注:chrome本地预览有错位问题需要在服务端演示正常,本地预览请用火狐浏览器. jq_slideImage 使用 var mySlideImage = new SlideImageVerify('# ...

  4. 如何在iOS上创建矢量图形 画云 和 拼图块

    https://github.com/ssyyjj88/PaintCode_Syj http://www.cocoachina.com/ios/20160330/15826.html 原文:How T ...

  5. 滤镜应用——拼图效果

    滤镜应用--拼图效果 原图: 效果图: 步骤: 1.打开原图,选择"滤镜"-"纹理"-"纹理化",点击右边小三角按钮: 2.点击" ...

  6. 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码

    文章目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开 ...

  7. 如何用HTML和css实现拼图,打造自己的html5拼图小游戏

    得益于liuyubobobo老师的canvas课程和思路指点,做了一版简单的 html5拼图小游戏,下面就简单介绍一下实现的原理... 利用canvas裁剪拼图所需的小块图片//核心代码如下: var ...

  8. 拼图游戏Canvas版

    目录 原身 canvas版的思路 canvas方法 拼图对象 代码部分 HMTL css js 拼图对象 原身 一开始写的拼图是用div一个一个列出来的,里面放的是切好的图片.拼图小游戏(前端) ca ...

  9. 【教学类-34-01】拼图(运动项目-长方块拼图)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)

    背景需求: 一个月的Python纸类学具研究中,我发现个别男孩喜欢把作业中的数字.图案.单元格剪成小块(小卡片) 近年几周,剪条.剪块的孩子人数也慢慢递增.(分发时有点麻烦) 幼儿需求:锻炼手指精细动 ...

最新文章

  1. vs怎么编译php文件,vscode怎么初始编译
  2. 7-5 流水作业调度 (10 分)(思路+详解+johnson解析)Come Baby!!!!!!!!!!
  3. 乱花渐欲迷人眼-杜绝设计的视噪
  4. 城市APP集成Firebase/Admob/增强现实带PHP管理后台
  5. python能编游戏吗_python能做游戏吗
  6. (轉貼) C Standard Library (初級) (C/C++)
  7. Mybatis中的@SelectKey注解
  8. 机器人领域会议期刊特点
  9. Java高并发 -- 并发扩展
  10. vue 导出excel
  11. UG NX 12 同步建模:删除面
  12. C语言 Fibonacci数列(递推)
  13. 一款非常便捷好用的mac办公工具:WPS Office 2020
  14. Navicat删除注册表
  15. 《跟任何人都聊得来》读书笔记
  16. 如何提高芝麻信用分?解读芝麻信用是怎么做的
  17. python神经网络包_python 神经网络包 NeuroLab
  18. android m3u8 合并,M3u8合并APP
  19. RabbitMq报错 Execution of Rabbit message listener failed
  20. python-递归——猴子吃桃

热门文章

  1. Typora+PicGo+github搭建免费稳定图床写博客如行云流水(mac+window)
  2. 《[深入浅出 C#] (第3版)》 - 学习笔记
  3. MTU(Maximum Transmission Unit),最大传输单元
  4. 行为型模式:解释器模式
  5. java 课后习题 Vector类的 初使用
  6. ramda.js api 速查
  7. 函数式编程 -- 函数组合
  8. 利用Github搭建免费图床
  9. ffmpeg转换格式
  10. 论重写和里式替换原则(LSP)