`

棋盘覆盖算法(分治算法)

阅读更多
就说在一个2的K次方乘以2的K次方的棋盘里,又一个特殊的方格,那么这个就叫做特殊棋盘,比方说又一个4行4列的棋盘,第2行2列与其他方格不同(其他方格是空白,它是阴影),那么这个就叫做特殊棋盘了,好,要实现的是用一个L形状的骨牌来覆盖除特殊方格以外的其他方格,要求任何2个L骨牌不得重复,算法如下:(请大家讨论哦)听取各位大侠的意见:

C++算法的:

#include "iostream.h"
#include "iomanip.h"
#define N 8
class qipan
{
public:
void chessBoard(int tr,int tc,int dr,int dc,int size)
{

   if(size==1)return;
 
   int t=tile++,s=size/2;
   if(dr<tr+s&&dc<tc+s)
    chessBoard(tr,tc,dr,dc,s);
    else
   {
    board[tr+s-1][tc+s-1]=t;
    chessBoard(tr,tc,tr+s-1,tc+s-1,s);
   }
 
   if(dr<tr+s&&dc>=tc+s)
    chessBoard(tr,tc+s,dr,dc,s);
   else
   {
 
    board[tr+s-1][tc+s]=t;
    chessBoard(tr,tc+s,tr+s-1,tc+s,s);
   }

   if(dr>=tr+s&&dc<tc+s)
    chessBoard(tr+s,tc,dr,dc,s);
   else
   {
 
    board[tr+s][tc+s-1]=t;
    chessBoard(tr+s,tc,tr+s,tc+s-1,s);
   }

   if(dr>=tr+s&&dc>=tc+s)
    chessBoard(tr+s,tc+s,dr,dc,s);
   else
   {
 
    board[tr+s][tc+s]=t;
    chessBoard(tr+s,tc+s,tr+s,tc+s,s);
   }
 
  
}

public:
int tile,tr,tc,dr,dc,size;
int board[N][N];



};


void main()
{
qipan q;
q.tile=0;


for(int i1=1;i1<=N;i1++)
{
for(int j1=1;j1<=N;j1++)
   q.board[i1][j1]=0;
}
   q.board[2][2]=-1;
q.chessBoard(1,1,2,2,N);

for(int i=1;i<=N;i++)
{
   for(int j=1;j<=N;j++){
    cout<<setw(4)<<q.board[j];}
   cout<<endl;
}


}


分享到:
评论

相关推荐

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

    本文主要介绍了Java基于分治算法实现的棋盘覆盖问题,简单描述了棋盘覆盖问题,并结合具体实例形式分析了Java基于分治算法实现棋盘覆盖问题的相关操作技巧。 知识点一:分治算法的基本概念 分治算法是一种将复杂...

    棋盘覆盖问题 算法设计

    ### 棋盘覆盖问题与算法设计 #### 一、问题背景及定义 **棋盘覆盖问题**是指:给定一个大小为 \(2^n \times 2^n\) 的棋盘,其中有一个单元格被挖掉(称为缺陷单元),要求用L型骨牌(即由3个相连的单元格组成的...

    棋盘覆盖问题 分治法——C++代码

    以下是棋盘覆盖问题的分治算法步骤: 1. 选择棋盘的第一行,任意放置一个皇后。 2. 对于第二行,检查所有可能的位置,如果当前位置上的皇后不与第一行的皇后冲突,就放置一个皇后。如果有冲突,就尝试下一个位置,...

    MFC界面实现分治法解决棋盘覆盖算法的演示

    4. **更新界面**:在分治算法执行过程中,每次找到一个覆盖物时,更新棋盘界面以显示该覆盖物。可以使用CRect或其他图形对象来表示覆盖物,并在界面上画出。 5. **交互功能**:添加按钮或菜单项,允许用户选择不同...

    算法分治 汉诺塔、棋盘覆盖 JAVA图形演示

    ChessBoard.java文件很可能是实现了棋盘覆盖算法的Java代码。 对于这两种问题,Java图形演示可能是指使用Java的Swing或JavaFX库来创建用户界面,动态展示圆盘或皇后移动的过程。用户可以点击按钮启动算法,程序会在...

    棋盘覆盖算法(C)源代码

    程序中主要描述了棋盘覆盖的分治算法。实际的应用中只是利用这种思想。例如分型的经典模型就和这个例子很相像。

    棋盘覆盖算法 ,算法设计与分析,递归与分治策略

    在一个2的k次方乘以2的k次方个方格的棋盘中,恰有一个方格与其他方格不同为特殊方格,棋盘称为特殊棋盘,用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

    棋盘覆盖与二分查找C++

    分治法解决棋盘覆盖与二分查找问题,C++描述.算法设计与分析经典例题

    用 分治法 解决棋盘覆盖问题

    ### 使用分治法解决棋盘覆盖问题 #### 一、问题背景及定义 **棋盘覆盖问题**是在一个\(2^k \times 2^k\)的棋盘上,除去一个特殊的方格后,如何利用L型方块来完全覆盖剩余的区域。这里的L型方块是由三个单元格组成...

    算法设计与分析(用分治法求解棋盘覆盖问题)

    **算法设计与分析——棋盘覆盖问题的分治法求解** 在计算机科学中,算法设计与分析是核心部分,它涉及到如何有效地解决问题并优化计算效率。本篇将重点探讨如何利用分治策略来解决棋盘覆盖问题。棋盘覆盖问题是一个...

    棋盘覆盖算法代码

    ### 棋盘覆盖算法详解及Java实现 #### 一、背景介绍 棋盘覆盖问题是一种经典的计算机科学问题,涉及到递归与分治思想的应用。本篇将详细解析棋盘覆盖算法的核心概念,并通过Java语言具体实现算法逻辑。 #### 二、...

    L型骨牌(棋盘覆盖问题)---算法分析之分治策略

    算法分析与设计 课程中分治策略的典型例子,采用MFC文档编程可视化实现算法; 能够手动进行对棋盘的颜色填充,并能显示棋盘中的填充数值。 由于这是课程作业,时间紧而赶制的,封装性可能比较差。 我用的版本是C++...

    算法与算法设计 棋盘覆盖问题

    棋盘覆盖算法的核心在于分治策略。首先,检查棋盘大小是否为1×1,如果是,则结束递归。若不是,将棋盘分为4个大小相等的子棋盘,然后对每个子棋盘进行递归调用,直到棋盘尺寸减小到1×1。在划分过程中,判断特殊...

    棋盘覆盖算法流程.doc

    棋盘覆盖算法是指使用分治策略来解决一个难以直接解决的大问题,即将一个问题分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法所能解决的问题一般具有以下几个特征: 1. 该问题的规模缩小到一定的...

    C++ 实现棋盘覆盖算法

    总结一下,使用C++和分治法解决棋盘覆盖问题涉及到以下几个关键知识点: 1. 分治法的概念和应用。 2. 递归函数的设计与实现。 3. 皇后冲突检测的算法。 4. 回溯法在搜索解决方案中的作用。 5. C++中的数据结构(如`...

    qipan_棋盘覆盖算法.zip

    《棋盘覆盖问题与分治算法的探讨》 在计算机科学中,算法是解决问题的核心工具,而分治算法作为其中一种高效且具有广泛适用性的策略,常常被用来解决复杂问题。本篇将深入探讨棋盘覆盖问题以及如何利用分治算法进行...

    用C++语言实现棋盘覆盖分治算法

    在棋盘覆盖问题中,要用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 当k&gt;0时,将2k×2k棋盘分割为4个2k-1×2k-1 子棋盘,特殊方格必位于4个较小子棋盘之一...

    西南交通大学算法分析与设计实验报告 - 棋盘覆盖问题.docx

    通过本实验,我们不仅掌握了棋盘覆盖问题的解决策略,还深入理解了分治算法的思想,并能将其应用于实际编程中。在实验过程中,我们需要注意递归的终止条件、特殊情况的处理以及如何有效地将子问题的解整合为原问题的...

    棋盘覆盖问题分治法代码

    棋盘覆盖问题,是一种编程问题。如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。

Global site tag (gtag.js) - Google Analytics