L 型组件填图问题

1.问题描述

设 B 是一个 n×n 棋盘,n=2 k,(k=1,2,3,…)。用分治法设计一个算法,使得:用若干个 L 型条块可以覆盖住 B 的除一个特殊方格外的所有方格。其中,一个 L 型条块可以覆盖 3 个 方格。且任意两个 L 型条块不能重叠覆盖棋盘。

例如:如果 n=2,则存在 4 个方格,其中,除一个方格外,其余 3 个方格可被一 L 型条 块覆盖;当 n=4 时,则存在 16 个方格,其中,除一个方格外,其余 15 个方格被 5 个 L 型条 块覆盖。

2. 具体要求

输入一个正整数 n,表示棋盘的大小是 n*n 的。输出一个被 L 型条块覆盖的 n*n 棋盘。 该棋盘除一个方格外,其余各方格都被 L 型条块覆盖住。为区别出各个方格是被哪个 L 型条 块所覆盖,每个 L 型条块用不同的数字或颜色、标记表示。

3. 测试数据

输入:8

输出:


import random;count = 0
def initMap(n):res = []for i in range(n):arr = [0] * n  # 大坑res.append(arr)return resdef fill(src, half, x, y, direction):global countcount += 1if direction == 0:src[half + x][half + y] = countsrc[half + x - 1][half + y] = countsrc[half + x][half + y - 1] = countelif direction == 1:src[half + x][half + y] = countsrc[half + x - 1][half + y - 1] = countsrc[half + x - 1][half + y] = countelif direction == 2:src[half + x][half + y] = countsrc[half + x - 1][half + y - 1] = countsrc[half + x][half + y - 1] = countelif direction == 3:   src[half + x - 1][half + y - 1] = countsrc[half + x - 1][half + y] = countsrc[half + x][half + y - 1] = countdef splitMap(src, n, par_x, par_y, x, y):if n == 1:returnhalf = n // 2;if (x + half) > par_x and (y + half) > par_y:   # 特殊点在左上棋盘fill(src, half, x, y, 0)splitMap(src, half, par_x, par_y, x, y)# 除去特殊点所在棋盘的递归外进行剩余棋盘递归splitMap(src, half, x + half, y + half - 1, x + half, y)  # 右上splitMap(src, half, x + half - 1, y + half, x, y + half)  # 左下splitMap(src, half, x + half, y + half, x + half, y + half)  # 右下elif (x + half) <= par_x and (y + half) > par_y:  # 特殊点在右上棋盘fill(src, half, x, y, 1)splitMap(src, half, par_x, par_y, x + half, y)splitMap(src, half, x + half - 1, y + half - 1, x, y)  #左上splitMap(src, half, x + half - 1, y + half, x, y + half)  # 左下splitMap(src, half, x + half, y + half, x + half, y + half)  # 右下elif (x + half) > par_x and (y + half) <= par_y:  # 特殊点在左下棋盘fill(src, half, x, y, 2)splitMap(src, half, par_x, par_y, x, y + half)    splitMap(src, half, x + half - 1, y + half - 1, x, y)  #左上splitMap(src, half, x + half, y + half - 1, x + half, y)  # 右上splitMap(src, half, x + half, y + half, x + half, y + half)  # 右下elif (x + half) <= par_x and (y + half) <= par_y:  # 特殊点在右下棋盘fill(src, half, x, y, 3)splitMap(src, half, par_x, par_y, x + half, y + half)    splitMap(src, half, x + half - 1, y + half - 1, x, y)  #左上splitMap(src, half, x + half, y + half - 1, x + half, y)  # 右上splitMap(src, half, x + half - 1, y + half, x, y + half)  # 左下def fillMap(n, par_x, par_y):src = initMap(n)splitMap(src, n, par_x=par_x, par_y=par_y, x=0, y=0)return srcdef showMap(res, n):print()for i in range(n):for j in range(n):print(res[i][j], end='\t')        print()n = int(input())
x = random.randint(0, n)
y = random.randint(0, n)
res = fillMap(n, par_x=x, par_y=y)
showMap(res, n)# 1 1 1 1
# 1 0 0 1
# 1 0 0 1
# 1 1 1 1# 1 1 2 2 0 0 0 0
# 1 4 4 2 0 0 0 0
# 3 4 5 5 0 0 0 0
# 3 3 5 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0

Python L型组件填图问题(棋盘覆盖问题)相关推荐

  1. 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)

    问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...

  2. 棋盘覆盖问题详解(递归)

    棋盘覆盖问题详解(分治,非递归) (代码由 java 编写) 1.问题描述 如图(a)所示,k>0时,有一个2k×2k的棋盘,棋盘中任意位置有一个特殊的方格,要求利用图(b)中的4中L型骨牌覆盖 ...

  3. 棋盘覆盖问题 java_Java基于分治算法实现的棋盘覆盖问题示例

    本文实例讲述了Java基于分治算法实现的棋盘覆盖问题.分享给大家供大家参考,具体如下: 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其 ...

  4. 浅谈棋盘覆盖问题(算法思想及伪代码)

    问题描述:在一个的方格组成的棋盘中,有一个方格与其他的方格不同,称之为奇异块.要求:若使用一下四种L型骨牌覆盖除这个奇异块的其他方格,覆盖过程中L型骨牌之间不能有互相覆盖,设计算法求出覆盖方案.(四种 ...

  5. 算法 - 棋盘覆盖(JavaScript)

    目录 题目描述 输入 输出 题目解析 算法代码实现 题目描述 在一个2^k * 2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格,且称该棋盘为特殊棋盘. 在棋盘覆盖问题中,要 ...

  6. python堆叠面积图_06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图...

    1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主 同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsi ...

  7. CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)

    CSP 201409-5 拼图问题 一.题目信息 第一次写博客,有什么疏漏之处,欢迎各位大佬指出<(* ̄▽ ̄*)/ 题目要求 试题编号 201409-5 试题名称 拼图 时间限制 3.0s 试题 ...

  8. 分治算法--L型骨牌棋盘覆盖

    L型骨牌棋盘覆盖 题目描述 有一个棋盘,要求用给定的四种骨牌进行覆盖.四种骨牌定义如下:   给定的棋盘中有一个格子不存在,即不需要覆盖的格子. 输入 输入有多个用例,第一个为用例个数n,接下来每个用 ...

  9. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图

    目录 Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图 1.基本图表绘制 plt.plot() ts.plot() 由Seri ...

  10. python棋盘覆盖问题_棋盘覆盖问题可视化动图——python

    棋盘覆盖问题可视化动图--python 棋盘覆盖问题是一个经典的分治法解决的问题,具体内容可以参照以下博主的解析 为了更好的理解该算法分治的过程 利用了python中的matplotlib库进行了该算 ...

最新文章

  1. 阿里云数据库备份DBS商业化发布,数据库实时备份到OSS
  2. es6 proxy、handler.get()
  3. Spring Cloud 知识 思维导图
  4. 牛客练习赛20:A. 礼物(组合数学/小球与盒子问题)
  5. 【翻译自mos文章】Oracle GoldenGate 怎么在源头的传输进程和目的端的server/collector进程之间分配 port?...
  6. 关于大学生阶段团队类型选择
  7. 【科研必备】常用数学符号大全
  8. 措施优先级(AP)方法
  9. 阿里云移动推送 - 异常记录
  10. 判断二极管导通例题_几种二极管的检测方法(普通,稳压,双向触发)
  11. 美国ZIPnbsp;Codenbsp;一览表
  12. 北京大学MOOC 程序设计与算法(三)魔兽世界三(开战)
  13. STM32寄存器编程思路 - 从51到stm32开发入门,真干货
  14. 绍兴14岁女孩被德云社录取,她究竟有什么来历呢?
  15. 面经-中科创达(校招)
  16. 2019DevFest | 从互联网前端到2B交付型前端-探索面向交付的实用前端技术栈
  17. 赋值运算符重载和日期运算代码
  18. 人大计算机系学霸,中国人民大学8个最强专业,有的超越清华北大,软肋也比较明显...
  19. js数字时钟 js桌面时钟 js获得系统当前时间
  20. 【文献学习】文献分类、查询、阅读及管理

热门文章

  1. python壁纸4k_Python爬虫练习:爬取高清4K桌面壁纸
  2. 人物传记:Kyle Tedford:耐心与思考是优秀交易者的必备素质
  3. [BZOJ5276] Skyfall [CF235E] Number Challenge [莫比乌斯反演]
  4. windows 安装SNMP MIB Browser
  5. java 判断邮箱_java使用正则表达式判断邮箱格式是否正确的方法
  6. 汽车软件系统常用简称
  7. 小辣椒安卓机器人无命令_雅奇小辣椒(安卓手机app开发软件)V1.0.1 中文版
  8. 计算机系的学生的未来计划,学生未来计划.doc
  9. python识图找图_初探利用Python进行图文识别(OCR)
  10. linux可变剪切分析,SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包...