就说在一个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基于分治算法实现棋盘覆盖问题的相关操作技巧。 知识点一:分治算法的基本概念 分治算法是一种将复杂...
### 棋盘覆盖问题与算法设计 #### 一、问题背景及定义 **棋盘覆盖问题**是指:给定一个大小为 \(2^n \times 2^n\) 的棋盘,其中有一个单元格被挖掉(称为缺陷单元),要求用L型骨牌(即由3个相连的单元格组成的...
以下是棋盘覆盖问题的分治算法步骤: 1. 选择棋盘的第一行,任意放置一个皇后。 2. 对于第二行,检查所有可能的位置,如果当前位置上的皇后不与第一行的皇后冲突,就放置一个皇后。如果有冲突,就尝试下一个位置,...
4. **更新界面**:在分治算法执行过程中,每次找到一个覆盖物时,更新棋盘界面以显示该覆盖物。可以使用CRect或其他图形对象来表示覆盖物,并在界面上画出。 5. **交互功能**:添加按钮或菜单项,允许用户选择不同...
ChessBoard.java文件很可能是实现了棋盘覆盖算法的Java代码。 对于这两种问题,Java图形演示可能是指使用Java的Swing或JavaFX库来创建用户界面,动态展示圆盘或皇后移动的过程。用户可以点击按钮启动算法,程序会在...
程序中主要描述了棋盘覆盖的分治算法。实际的应用中只是利用这种思想。例如分型的经典模型就和这个例子很相像。
在一个2的k次方乘以2的k次方个方格的棋盘中,恰有一个方格与其他方格不同为特殊方格,棋盘称为特殊棋盘,用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
分治法解决棋盘覆盖与二分查找问题,C++描述.算法设计与分析经典例题
### 使用分治法解决棋盘覆盖问题 #### 一、问题背景及定义 **棋盘覆盖问题**是在一个\(2^k \times 2^k\)的棋盘上,除去一个特殊的方格后,如何利用L型方块来完全覆盖剩余的区域。这里的L型方块是由三个单元格组成...
**算法设计与分析——棋盘覆盖问题的分治法求解** 在计算机科学中,算法设计与分析是核心部分,它涉及到如何有效地解决问题并优化计算效率。本篇将重点探讨如何利用分治策略来解决棋盘覆盖问题。棋盘覆盖问题是一个...
### 棋盘覆盖算法详解及Java实现 #### 一、背景介绍 棋盘覆盖问题是一种经典的计算机科学问题,涉及到递归与分治思想的应用。本篇将详细解析棋盘覆盖算法的核心概念,并通过Java语言具体实现算法逻辑。 #### 二、...
算法分析与设计 课程中分治策略的典型例子,采用MFC文档编程可视化实现算法; 能够手动进行对棋盘的颜色填充,并能显示棋盘中的填充数值。 由于这是课程作业,时间紧而赶制的,封装性可能比较差。 我用的版本是C++...
棋盘覆盖算法的核心在于分治策略。首先,检查棋盘大小是否为1×1,如果是,则结束递归。若不是,将棋盘分为4个大小相等的子棋盘,然后对每个子棋盘进行递归调用,直到棋盘尺寸减小到1×1。在划分过程中,判断特殊...
棋盘覆盖算法是指使用分治策略来解决一个难以直接解决的大问题,即将一个问题分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法所能解决的问题一般具有以下几个特征: 1. 该问题的规模缩小到一定的...
总结一下,使用C++和分治法解决棋盘覆盖问题涉及到以下几个关键知识点: 1. 分治法的概念和应用。 2. 递归函数的设计与实现。 3. 皇后冲突检测的算法。 4. 回溯法在搜索解决方案中的作用。 5. C++中的数据结构(如`...
《棋盘覆盖问题与分治算法的探讨》 在计算机科学中,算法是解决问题的核心工具,而分治算法作为其中一种高效且具有广泛适用性的策略,常常被用来解决复杂问题。本篇将深入探讨棋盘覆盖问题以及如何利用分治算法进行...
在棋盘覆盖问题中,要用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 当k>0时,将2k×2k棋盘分割为4个2k-1×2k-1 子棋盘,特殊方格必位于4个较小子棋盘之一...
通过本实验,我们不仅掌握了棋盘覆盖问题的解决策略,还深入理解了分治算法的思想,并能将其应用于实际编程中。在实验过程中,我们需要注意递归的终止条件、特殊情况的处理以及如何有效地将子问题的解整合为原问题的...
棋盘覆盖问题,是一种编程问题。如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。