湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

多连块拼图

时间限制:
1000 ms  |  内存限制:
65535 KB
难度:
4

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

    给一个大多连块和小多连块,你的任务是推断大多连块能否够由两个这种小多连块拼成。小多连块仅仅能平移,不能旋转或者翻转。两个小多连块不得重叠。左下图是一个合法的拼法,但右边两幅图都非法。中间那幅图的问题在于当中一个小多连块旋转了,而右图更离谱:拼在一起的那两个多连块根本就不是那个给定的小多连块(给定的小多连块画在右下方)。 
湖南省第七届大学生计算机程序设计竞赛 多连块拼图 (模拟)

输入
输入最多包括 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 <cstdio>
#include <cstring>
using namespace std;
char map[10][10],s[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(s[i][j]=='*')
            {
                x1=i;
                y1=j;
                flag=false;
                break;
            }
        }
         if(!flag) break;
    }
}
void get_small()//获得小多连块的第一个‘*’位置
{
    bool flag=true;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(map[i][j]=='*')
            {
                x2=i;
                y2=j;
                flag=false;
                break;
            }
        }
        if(!flag) break;
    }
}
bool judge()//推断是否所有匹配
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        if(s[i][j]=='*')
        return false;
    return true;
}
int sovle()//匹配过程
{
    get_small();
    while(!judge())
    {
        get_big();
        for(int i=x2;i<m;i++)
            for(int j=0;j<m;j++)
        {
            if(map[i][j]=='*')
            {
                 if(s[x1+i-x2][y1+j-y2]=='*')//关键就是这里,用小连块的位置去匹配大连块的位置
                        s[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",s[i]);
        for(j=0;j<m;j++)
          scanf("%s",map[j]);
        printf("%d\n",sovle());
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117909.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MariaDB安装教程

    MariaDB安装教程注:从MariaDB10.4.3开始,不再提供预构建的数据目录,并且用户需要运行mysql_install_db.exe来创建数据目录1、解压到自定义路径E:\MariaDB\mariadb-10.5.4-winx642、将其中的bin加入path系统环境路径3、用管理员方式打开cmd,并打开bin目录4、输入mysql_install_db.exe–datadir=E:\MariaDB\mariadb-10.5.4-winx64\data–service=MyMar..

    2022年6月14日
    36
  • matlab循环读取txt文件「建议收藏」

    matlab循环读取txt文件「建议收藏」一般情况下,假如我要读取一个名为a.txt的文件,只需要利用下面的语句:a=load(‘a.txt’);现在假如我需要循环读取saif_1.txt,saif_2.txt,,,一直到saif_10.txt,他们都是10*1的矩阵,对他们进行转置操作后,再合并到一个文件中,可以利用下面的语句:forN=1:10a=load([‘saif_’,num2str(N),’.txt’]);……

    2022年10月7日
    4
  • bi报表开发工具_三大报表的勾稽关系图

    bi报表开发工具_三大报表的勾稽关系图为什么需要电子表格国内目前的同类产品中都有报表工具,这些工具大部分都有一个类似Excel的操作界面:单元格、快捷键、工具栏等典型设计工具要求。这些工具要么需要有专业的背景,或者专业的工程师提供支持,要么学习成本高,调整报表样式十分麻烦。作为报表开发人员而言,花费大量时间去学习一个新工具是一件非常苦恼的事情,我们能否直接把exce作为报表设计的工具呢?基于这个思路,诞生了我们的Spreadsheet…

    2022年10月19日
    2
  • CICD – docker私有仓库

    CICD – docker私有仓库1、创建私有仓库dockerpullregistrydockerrun-d-v/opt/registory:/var/lib/registory-p5000:5000–restart=always–nameregistryregistry2、查看私有仓库curlhttp://47.99.211.128:5000/v2/_catalog#域名解析后…

    2022年5月10日
    41
  • 基于SQL的日志分析工具myselect

    基于SQL的日志分析工具myselect

    2021年11月29日
    38
  • 发送国外邮箱失败

    发送国外邮箱失败在公司当发送邮件给国外客户的时候,发送失败提示:点击下面链接:则代表地址被加入了黑名单,发送不到邮件。解决方法,点击方框内的网站,打开网页后拉到最下面:点击解除封禁跳转到则表示成功。需要1-2个小时进行解除! 转载于:https://blog.51cto.com/8763846/1629650…

    2022年7月12日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号