算法设计与分析/数据结构与算法实验1:棋盘覆盖问题

简介: 算法设计与分析/数据结构与算法实验1:棋盘覆盖问题

1.实验目的

(1)掌握递归与分治法的处理思路与算法框架。

(2)掌握应用递归与分治法解决具体问题的方法。

2.实验内容

(1)问题描述


image.png

(2)输入


image.png

(3)输出

棋盘覆盖的方案。用数组表示棋盘,骨牌块号用数字表示,并输出颜色。

3.问题实例分析


image.png

我们称含“特殊方格”的区域为“特殊区域”。如图所示,1号区域含特殊方格,我们可以称其为“特殊区域”。为了将不含特殊方格的区域转化为特殊区域,可以在这三个区域的交界处放置一个L型骨牌。如图所示。

image.png

当大的特殊棋盘被转化成的特殊棋盘时,其中一个方格是特殊方格,剩下三个方格可以直接被L型骨牌覆盖。事实上,在程序实现时,仍然认为剩下三个区域的交界处被放置一个L型骨牌。如图所示。

在将4个小特殊棋盘覆盖完成后,可以看到完整的大特殊棋盘的效果。

image.png

4.算法描述及说明

数据结构

image.png


5.算法正确性分析


image.png

7.运行结果及展示说明

image.png

8.心得体会

9.程序源代码

#include<iostream>
#include<cmath>
#include<iomanip>
#include<windows.h>
using namespace std;
int tile = 1;
int board[128][128];
void chessboard(int tr, int tc, int dr, int dc, int size) {
  //tr:棋盘左上角方格行号
  //tc:棋盘左上角方格列号
  //dr:特殊方格行号
  //dc:特殊方格列号
  //size:当前棋盘大小
  if (size == 1) return;
  int t = tile++;//L型骨牌号
  int s = size / 2;//子棋盘大小
  //(tr+s-1,tc+s-1)代表左上棋盘的右下角
  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);
  }
}
int main() {
  HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //获取缓冲区句柄,在输出颜色时使用
  int k;
  cout << "请输入棋盘大小:";
  cin >> k;
  int size = pow(2, k);
  int dr, dc;
  cout << "请输入特殊方格坐标:";
  cin >> dr >> dc;
  chessboard(0, 0, dr, dc, size);
  for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
      SetConsoleTextAttribute(hCon, board[i][j]%6+1); //设置文本及背景色,数字设置了输出颜色
      cout <<setw(4)<< board[i][j];
    }
    cout << endl;
  }
  return 0;
}


目录
打赏
0
0
0
0
54
分享
相关文章
|
28天前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
47 9
 算法系列之数据结构-二叉树
|
26天前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
41 3
 算法系列之数据结构-Huffman树
|
28天前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
66 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
98 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
127 25
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
84 23
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
95 20
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
79 2
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
104 19
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
115 1

热门文章

最新文章

  • 1
    局域网屏幕监控系统中的Python数据结构与算法实现
    141
  • 2
    2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
    62
  • 3
    2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    55
  • 4
    2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    58
  • 5
    2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    82
  • 6
    2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    46
  • 7
    2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    83
  • 8
    2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    49
  • 9
    2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    58
  • 10
    2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
    55
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等