在一个2k∗2k(k为正整数,k<=10,length=2k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格(其坐标为a,b,分别代表行坐标号和列坐标号),以及有四种L型骨牌(如下图)。求用若干块这种L型骨牌实现除该特殊点棋盘的全覆盖。(本题要求采用分治算法做)

输入格式:

输入三个数,分别是a,b,length.

输出格式:

输出整个棋盘。其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左上,右上,右下,左下的顺时针顺序铺满棋盘。每一块骨牌中三个方格数字相同,按照顺序标号,即第一块骨牌全标为1,第二块骨牌全标为2,...,以此类推。输出的每个数占4个场宽,右对齐。

输入样例:

1 1 4

表示:特殊格子为(1,1),棋盘有4行4列。

输出样例:

   0   2   3   32   2   1   35   1   1   45   5   4   4

提示:先铺三个1,再铺三个2,...,最后铺三个5(即先处理子问题交界的地方,再处理左上,右上,右下,左下的子问题).

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
#include <algorithm>
#include <cstdio>using namespace std;
int box[1500][1500]; // 2的10次幂为1024
int m = 1;  //骨牌编号
void whatf(int x, int y, int a, int b, int length);int main()
{int x, y, length;cin >> x >> y >> length;x--;y--;whatf(x, y, 0, 0, length); //按照提议的函数for(int i = 0; i < length; i++) //输出答案{for(int j = 0; j < length; j++)printf("%4d", box[i][j]);cout << endl;}return 0;}/*让没有被操作过的方格设为-1
分为几种情况,当只有一个时,就直接是0
当有length = 2时,判断一下哪个被修改过,将其余三个改成m,m再自增
当length > 2时,就将拆分成4个部分,将除了含有小红点的部分都改为m
*///x,y为特殊方块的位置,a,b为长和宽的起点,length为正方形尺寸
void whatf(int x, int y, int a, int b, int length)
{if(length == 1){return;}int title = m++;int size = length/2;//如果特殊方块在左上if(x < a+size && y < b+size){whatf(x, y, a, b, size);}else //特殊方块不在左上的部分,就将该部分的右下角置为当前骨牌序号{box[a+size-1][b+size-1] = title; //将右下角置为当前骨牌序号whatf(a+size-1, b+size-1, a, b, size);}//如果特殊方块在右上if(x < a+size && y >= b+size){whatf(x, y, a, b+size, size);}else//特殊方块不在右上的部分,就将该部分的左下角置为当前骨牌序号{box[a+size-1][b+size] = title; //将左下角置为当前骨牌序号whatf(a+size-1, b+size, a, b+size, size);}//如果特殊方块在右下if(x >= a+size && y >= b+size){whatf(x, y, a+size, b+size, size);}else{box[a+size][b+size] = title;whatf(a+size, b+size, a+size, b+size, size);}//如果特殊方块在左下if(x >= a+size && y < b+size){whatf(x, y, a+size, b, size);}else{box[a+size][b+size-1] = title;whatf(a+size, b+size-1, a+size, b, size);}
}

5 棋盘覆盖(C++思路和代码)分治法练习5相关推荐

  1. 分治法循环赛c语言,循环赛问题分析和C语言代码-分治法.doc

    WORD格式整理版 学习好帮手 问题描述:设有n个运动员要进行网球循环赛.设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次: (3)当n ...

  2. python棋盘覆盖_java实现的棋盘覆盖

    课课家和大家分享一些Java实现的棋盘覆盖的思路:应用分治法 分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题.k&g ...

  3. 棋盘覆盖-经典的分治法问题

    棋盘覆盖-经典的分治法问题 一.问题概述 二.适用方法 三.代码展示 四.运行结果 五.算法分析 一.问题概述 在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格, ...

  4. 【算法】棋盘覆盖详解,基础教程~

    棋盘覆盖分析与实现 一.什么是棋盘覆盖? 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格,且称该棋盘为一个特殊棋盘.显然,特殊方格在棋盘上出现的 ...

  5. 棋盘覆盖问题--分治策略

    问题描述: 在一个2k×2k (k≥0,k为上标)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.棋盘覆盖问题要求用图(b)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外 ...

  6. 蛮力法与分治法解决最近点对问题-详细分析与C++代码实现

    最近点对问题 最近点对问题の目录 最近点对问题 什么是最近点对问题 代码基本框架 蛮力法及其代码 分治法及其代码 一般分治法遇到的特殊情况 如何优化分治法(6点确定与4点确定解法) 优化后分治法(4点 ...

  7. 三大算法之一:分治法(带你用分治法思想优化程序,计算降低复杂算法的时间复杂度)

    目录 ​ 零.前言 1.分治法 1.含义 2.分治法主要思想 3.分治法的求解步骤 1.确定初始条件 2.计算每一部分的时间复杂度 3.合并时间复杂度 4.求解 3.最大最小值问题 1.问题描述 2. ...

  8. java最接近对点及距离_最接近点对问题_分治法

    一.问题描述 给定平面上的n个点,找其中的一对点,使得在n个点组成的所有点对中该点对间的距离最小. 二.解题思路及所选算法策略的可行性分析 思路:利用分治法来解决问题.递归子结构求最接近点对总体可分为 ...

  9. 代码分析+原理图解——棋盘覆盖问题-分治法

    上算法课时,老师以文字+代码的方式讲了这道题,然而有很多同学反映听的不是太懂, 我们接触事物最直观的就是以图片理解,因此我尝试使用图解法来帮助大家理解. 问题描述:   注意:分治法最核心的一点是:分 ...

  10. 棋盘覆盖-分治法(代码实现)

    这是棋盘覆盖的代码实现,至于原理,请参考我的上一篇博客:棋盘覆盖问题-分治法 实现的效果如下: 或者如下: 其中0表示递归过程中标记的所有奇异点 实现代码如下: //棋盘大小size, 奇异点的坐标( ...

最新文章

  1. 史上最全的高可用服务系统线上问题排查工具单(一)
  2. jvm误区--动态对象年龄判定
  3. AJAX与WebService
  4. K-means算法、高斯混合模型 matlab
  5. SAP ABAP 异常处理
  6. 如何导出SAP的数据表字段和字段描述
  7. codeblock在linux中安装 出错
  8. 十一、飞机大战(IVX 快速开发教程)
  9. cocos2dx 字体外发光_在电致发光研发领域,选择有机材料是基于哪些原因?
  10. linux 进程间读写锁,Linux系统编程—进程间同步
  11. Kafka与RocketMQ的对比分析
  12. libcurl 发送邮件_libcurl smtp发送邮件附件大小限制问题
  13. centos转换linux格式,CentOS 下转换网易云音乐ncm格式为mp3
  14. Dell optiplex 3060 黑苹果 (8500+uhd630),alc255/alc256声卡爆音解决方案。
  15. MATLAB实现数图缩放:双线性内插法
  16. 使用pyspider爬取巨量淘宝MM图片 1
  17. 轻松搞懂Linux中程序、进程、服务的区别及操作命令
  18. VideoView源码分析
  19. EXCILE 电子表格常见公式
  20. Linux Ubuntu查看IP信息的两种方式Ubuntu中检查你的 IP 地址

热门文章

  1. git add 报错 warning: LF will be replaced by CRLF
  2. apache 403 forbid 解决方案
  3. MPP架构,SMP架构,NUWA架构
  4. java filetime_Java FileTime.to方法代码示例
  5. 易基因:RRBS揭示晚年锻炼可以减缓骨骼肌表观遗传衰老(甲基化年龄)|新研究
  6. FFmpeg的多媒体分析器ffprobe
  7. 信息化建设(智慧城市)工程中造价不清晰的问题
  8. 从零开始搭建hadoop集群01
  9. 13.8 - 软件测试工作量及成本估算 3.9 - 软件测试成本估算示例
  10. java 获取年和季度_java获取当前年、半年、季度、月、日、小时 开始结束时间等...