首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

棋盘覆盖问题

Tags: 算法 棋盘覆盖问题 ---- 【问题描述】 在一个2^k×2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有...k = 3,棋盘大小8 x 8 在棋盘覆盖问题中,要用下图中 4 中不同形态的** L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 个 L 型骨牌不得重叠覆盖**。...为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个 L 型骨牌覆盖这 3 个较小的棋盘的汇合处,如下图所示,这 3 个子棋盘上被 L 型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将原问题化为...4 个较小规模的棋盘覆盖问题。...【算法实现】 下面讨论棋盘覆盖问题中数据结构的设计: (1)棋盘:可以用一个二维数组board[size][size]表示一个棋盘,其中,size=2^k。

3.2K100

棋盘覆盖问题(Java)

棋盘覆盖问题(Java) 1、问题描述 2、算法设计思路 3、代码实现 4、复杂度分析 5、参考 ---- ---- 1、问题描述 在一个2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,...在棋盘覆盖问题中,要用下图所示的4种不同形态的L型骨牌覆盖一个给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。...易知,在任何一个2k×2k的棋盘覆盖中,用到的L型骨牌个数恰好为(4k - 1)/3。 2、算法设计思路 使用分治策略,可以设计出解棋盘覆盖问题的简洁算法。...为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,如下图(b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。...3、代码实现 ❝特殊棋盘我们采用0来表示,同时假设特殊方格的位置为第三行第三列 ❞ 棋盘一分为四之后,依次覆盖左上角子棋盘、右上角子棋盘、左下角子棋盘、右下角子棋盘

76520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    棋盘覆盖问题(转载)

    问题描述 在一个2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。...在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 ? ?...解题思路 分析:当k>0时,将2k×2k棋盘分割为4个2^k-1×2^k-1 子棋盘(a)所示。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。...为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,如 (b)所示,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘1×1。

    54310

    java 实现棋盘覆盖问题

    问题描述:在一个2k*2k的棋盘中,有一个特殊方格,要求用L型骨牌覆盖满除特殊方格外的所有其他方格,且骨牌不得重叠....: 左上的子棋盘若不存在特殊方格,将该子棋盘右下角的那个方格覆盖为特殊方格 右上的子棋盘若不存在特殊方格,将该子棋盘左下角的那个方格覆盖为特殊方格 左下的子棋盘若不存在特殊方格,将该子棋盘右上角的那个方格覆盖为特殊方格...右下的子棋盘若不存在特殊方格,将该子棋盘左上角的那个方格覆盖为特殊方格 至此,每个小棋盘都有一个特殊方格,然后递归调用,就可以解决问题了。... board;  /** 模拟骨牌(相同数字为同一块骨牌)  */  static int tile = 1;  /**   * 棋盘覆盖问题   * @param dr  左上角方格行号   * @...由于覆盖2k*2k的棋盘所需的骨牌个数为(4k-1)/3,所以此算法是一个渐进意义下最优算法。

    1.8K110

    递归与分治之棋盘覆盖问题

    显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不同的特殊棋盘。 下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。 ?...在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 个 L 型骨牌不得重叠覆盖。 ?...易知,在任何一个 2^k * 2^k 的棋盘中,用到的 L 型骨牌个数恰为 (4^k-1)/3 。 求解棋盘问题,可利用分治的策略。...用一个 L 型骨牌覆盖这 3 个较小的棋盘的汇合处,如图所示,将这 3 个无特殊方格的子棋盘转化为特殊棋盘,从而将原问题化为 4 个较小规模的棋盘覆盖问题。...递归的使用 这种分割,直至棋盘简化为 1x1 棋盘。 ? python实现代码如下: 1 # coding =gbk 2 3 4 # tr左上角行号,tc左上角列号。

    1.3K60

    hdu------1281 棋盘游戏(最小覆盖点)

    “车”,并且使得他们不能互相攻击,这当然很简单,但是 Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。...所以现在 Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量 多的“车”被放下。...Gardon想让小希算出有多少个这样的重要点,你能解 决这个问题么? ?...接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。...Author Gardon Source 杭电ACM集训队训练赛(VI) Recommend 详细的代码: 最小覆盖点=最大匹配 代码: 1 /*Problem : 1281 ( 棋盘游戏 )

    72840

    POJ - 1321 棋盘问题

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。...要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。 Input 输入含有多组测试数据。 ...随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 ...Sample Input 2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 Sample Output 2 1 这个题就是一个简化版的N皇后问题,问的是有哪些情况,所以深搜...,题意是说给你N*N的棋盘,有的的地方能放,而且不能在一条水平线和竖直线上。

    42420

    动态规划之棋盘路径问题

    动态规划之棋盘路径问题 1.对比 DP vs 回溯 vs 贪心 回溯(递归) - 重复计算 贪心 - 永远局部最优 DP - 记录局部最优子结构/多种记录值 2.棋盘路径问题 问题描述: 如下图所示,小人从左上角移动到右下角...因此该问题是递归问题,同时可以通过动态规划解决。...3.判断是石头还是空地 上述棋盘有个很强的约束条件,就是棋盘的约束问题,粉红色假设为石头,没有粉红色为空地,那我们就是要找到空地,从空地进行行走,下面来编写这样的函数。...棋盘生成代码: import numpy as np m,n = 8,8 grid = np.zeros((m,n),dtype=np.int) for i in range(m): for j...下面为从右下角到左上角的动态规划代码: def countPath1(grid,m,n,dp): # 处理每一行 for i in range(m-1,-1,-1): if

    2K30

    分治(详解残缺棋盘 —— Java代码实现)

    ,yk) // 将各子问题的解合并为原问题的解 } } 案例 覆盖残缺棋盘 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。...用 (n2) / 3个三重格放置在 n × n 的缺陷棋盘上,正好能够覆盖所有方格 [v0a4t45dej.jpeg] 具体步骤: [i5ldi2lf14.png] 划分为四个小棋盘...其中一个是 4 × 4 缺陷棋盘 [hipg0igymd.png] 在其他三个 4 × 4 棋盘都都相邻的拐角上放一个三格板,使它们也成为缺陷棋盘 递归地覆盖四个4×4缺陷棋盘 在其它三个 4 × 4...[q034wbjx6y.jpeg] Java代码实现 package Chess; public class Chess { // 表示棋盘 private int[][] board; //...s - 1] = t; // 覆盖其余方格 chessBoard(tr, tc, tr + s - 1, tc + s - 1, s); } // 覆盖右上角子棋盘 if

    839107

    浅谈代码覆盖

    在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。...用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。 首先,让我们先来了解一下所谓的“代码覆盖率”。...我找来了所谓的定义: 代码覆盖率 = 代码覆盖程度,一种度量方式。 上面简短精悍的文字非常准确的描述了代码覆盖率的含义。...假如你的上司只要求你达到语句覆盖,那么你可以省下很多功夫,但是,换来的确实测试效果的不明显,很难更多地发现代码中的问题。...当然了,这同时说明了几个问题:     1.主管只使用语句覆盖率来考核测试人员本身就有问题。     2.测试人员的目的是为了测好代码,钻如此的空子是缺乏职业道德的。

    98960

    poj-1321 棋盘问题(dfs)

    Limit: 1000MS Memory Limit: 10000K Total Submissions: 63659 Accepted: 30423 Description 在一个给定形状的棋盘...要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 k 个棋子的所有可行的摆放方案 C。 Input 输入含有多组测试数据。...每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个 n * n 的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1 时表示输入结束。...随后的 n 行描述了棋盘的形状:每行有 n 个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。...理解以下数据还有样例应该差不多了 3 2 #.. .#. ..# 3 3 2 #.. .## ..# 4 AC 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    22330

    都100%代码覆盖了,还会有什么问题

    (图片来自:http://t.cn/R06rQHi) 引言 很多人看到这个标题时,都会想“你都100%代码覆盖了,怎么还会有问题呢?”...其实没有适用于所有项目的数值,每个项目都应有自己的阈值,但共性是,测试必须覆盖主要业务场景,代码的逻辑分支也必须尽可能的覆盖。 如何改进你的项目代码覆盖率?...函数覆盖率(function coverage):度量被测代码中每个定义的函数是否都被调用。 分支覆盖率(branch coverage):度量被测代码中每一个判定的分支是否都被测试到。...代码覆盖率最重要的意义在于: 阅读分析之前项目中未覆盖部分的代码,进而反推在前期QA以及相关测试人员在进行黑盒测试设计时是否考虑充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?...代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量绝对不会高到哪里去,可以作为测试自我审视的重要工具之一。

    93080
    领券