toj 4317 多连块拼图
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 多连块拼图相关推荐
- zcmu-1644 多连块拼图
C - 多连块拼图 多连块是指由多个等大正方形边与边连接而成的平面连通图形. -- 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能平移,不能旋 ...
- 打工人赚钱的另外四块拼图 | 赚钱游戏
这是一个关于如何赚钱的系列. 一个工作了十多年的程序员,用了三年时间尝试各种可以赚钱的项目,陆陆续续整理了十万余字的内容,于是就产生了这个系列. 我是谁 你好,我是星夜,一个已经工作了十多年的程序员. ...
- 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件
注:chrome本地预览有错位问题需要在服务端演示正常,本地预览请用火狐浏览器. jq_slideImage 使用 var mySlideImage = new SlideImageVerify('# ...
- 如何在iOS上创建矢量图形 画云 和 拼图块
https://github.com/ssyyjj88/PaintCode_Syj http://www.cocoachina.com/ios/20160330/15826.html 原文:How T ...
- 滤镜应用——拼图效果
滤镜应用--拼图效果 原图: 效果图: 步骤: 1.打开原图,选择"滤镜"-"纹理"-"纹理化",点击右边小三角按钮: 2.点击" ...
- 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码
文章目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开 ...
- 如何用HTML和css实现拼图,打造自己的html5拼图小游戏
得益于liuyubobobo老师的canvas课程和思路指点,做了一版简单的 html5拼图小游戏,下面就简单介绍一下实现的原理... 利用canvas裁剪拼图所需的小块图片//核心代码如下: var ...
- 拼图游戏Canvas版
目录 原身 canvas版的思路 canvas方法 拼图对象 代码部分 HMTL css js 拼图对象 原身 一开始写的拼图是用div一个一个列出来的,里面放的是切好的图片.拼图小游戏(前端) ca ...
- 【教学类-34-01】拼图(运动项目-长方块拼图)3*4格子(中班主题《个别化拼图》健康偏艺术-美术)
背景需求: 一个月的Python纸类学具研究中,我发现个别男孩喜欢把作业中的数字.图案.单元格剪成小块(小卡片) 近年几周,剪条.剪块的孩子人数也慢慢递增.(分发时有点麻烦) 幼儿需求:锻炼手指精细动 ...
最新文章
- vs怎么编译php文件,vscode怎么初始编译
- 7-5 流水作业调度 (10 分)(思路+详解+johnson解析)Come Baby!!!!!!!!!!
- 乱花渐欲迷人眼-杜绝设计的视噪
- 城市APP集成Firebase/Admob/增强现实带PHP管理后台
- python能编游戏吗_python能做游戏吗
- (轉貼) C Standard Library (初級) (C/C++)
- Mybatis中的@SelectKey注解
- 机器人领域会议期刊特点
- Java高并发 -- 并发扩展
- vue 导出excel
- UG NX 12 同步建模:删除面
- C语言 Fibonacci数列(递推)
- 一款非常便捷好用的mac办公工具:WPS Office 2020
- Navicat删除注册表
- 《跟任何人都聊得来》读书笔记
- 如何提高芝麻信用分?解读芝麻信用是怎么做的
- python神经网络包_python 神经网络包 NeuroLab
- android m3u8 合并,M3u8合并APP
- RabbitMq报错 Execution of Rabbit message listener failed
- python-递归——猴子吃桃