- 42
- 0
- 约2.48千字
- 约 3页
- 2019-02-13 发布于河北
- 举报
残缺棋盘完美覆盖C
问题描述:
残缺棋盘是有一个2kx2k (k≧1)个方格的棋盘,其中恰有一个方格残缺。
以上为四种三格板,残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。在此覆盖中要求:
两个三个板不能重叠;
三格板不能覆盖残缺方格,但必须覆盖其他所有方格。
算法设计:
当k0时,将2k×2k棋盘分割为4个2k-1×2k-1 。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘1×1。每次都对分割后的四个小方块进行判断,判断特殊方格是否在里面。这里的判断的方法是每次先记录下整个大方块的左上角方格的行列坐标,然后再与特殊方格坐标进行比较,就可以知道特殊方格是否在该块中。如果特殊方块在里面,这直接递归下去求即可,如果不在,这 根据分割的四个方块的不同位置,把右下角、左下角、右上角或者左上角的方格标记为特殊方块,然后继续递归。
三.代码实现:
#include stdafx.h
#includeiostream
#includeiomanip
using namespace std;
int tile=0;
int *(*board) = NULL;//定义指向指针的指针用于动态的创建用于存储骨牌号的
原创力文档

文档评论(0)