返回顶部
首页 > 资讯 > 后端开发 > Python >python实现棋盘覆盖问题及可视化
  • 551
分享到

python实现棋盘覆盖问题及可视化

2024-04-02 19:04:59 551人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

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

问题介绍

棋盘覆盖问题,是一种编程问题。

如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。k>0时,可将2k×2k的棋盘划分为4个2(k-1)×2(k-1)的子棋盘。这样划分后,由于原棋盘只有一个特殊方格,所以,这4个子棋盘中只有一个子棋盘包含该特殊方格,其余3个子棋盘中没有特殊方格。为了将这3个没有特殊方格的子棋盘转化为特殊棋盘,以便采用递归方法求解,可以用一个L型骨牌覆盖这3个较小棋盘的会合处,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种划分策略,直至将棋盘分割为1×1的子棋盘。

问题解释来源 百度

原网页

效果展示

k=1
k=1
k=2
k=2

代码实现

借助numpy处理数据,plot实现可视化

使用面向对象的方法设计了棋盘类。

一步步将棋盘分为小区块,指导区块的边长为1,退出递归。


import numpy as np
import matplotlib.pyplot as plt


class Board:
 def __init__(self, size, x, y):
  '''
  初始化棋盘

  :param size: 棋盘边长
  :param x: 特殊点横坐标
  :param y: 特殊点纵坐标
  '''
  self.special_block = (x, y)
  self.board = np.zeros((size, size), dtype=int)
  self.board[x][y] = (size * size - 1) / 3 + 1
  self.t = 1
  self.size = size

 def visualize(self):
  '''
  可视化函数

  :return: None
  '''
  plt.imshow(self.board, cmap=plt.cm.gray)
  plt.colorbar()
  plt.show()

 def fill_block(self, x, y):
  '''
  填充点(x, y)
  :param x: x
  :param y: y
  :return: None
  '''
  if self.board[x][y] == 0:
   self.board[x][y] = self.t
  else:
   raise Exception

 def fill(self, s_x, s_y, size, c_x, c_y):
  '''
  递归函数填充棋盘或子棋盘(下文称区块)

  :param s_x: 区块左上角x
  :param s_y: 区块左上角y
  :param size: 区块边长
  :param c_x: 区块特殊点坐标x
  :param c_y: 区块特殊点坐标x
  :return: None
  '''
  if size == 1:
   return
  pos = (round((c_x - s_x + 1) / size), round((c_y - s_y + 1) / size))
  center = (round(s_x + size / 2 - 1), round(s_y + size / 2 - 1))
  ls = [(0, 0), (0, 1), (1, 0), (1, 1)] # 代表四个子区块
  for i in ls:
   if i != pos: # 如果不是原有特殊点所在区块,则构造特殊点并填充
    x = center[0] + i[0]
    y = center[1] + i[1]
    self.fill_block(x, y)
  self.t += 1 # 标记号加一,标记下一骨牌
  for i in ls:
   if i != pos: # 如果不是原有特殊点所在区块
    # 所构造特殊点位置(x, y)
    x = center[0] + i[0]
    y = center[1] + i[1]
    x1 = s_x + i[0] * (size / 2)
    y1 = s_y + i[1] * (size / 2)
    self.fill(x1, y1, size / 2, x, y)
   else: # 如果是原有特殊点所在区块
    x1 = s_x + i[0] * (size / 2)
    y1 = s_y + i[1] * (size / 2)
    self.fill(x1, y1, size / 2, c_x, c_y)

主函数


if __name__ == '__main__':
 k = eval(input("请输入正整数K(棋盘大小2^2k,2^2k):\n"))
 loc_x = eval(input("请输入特殊点横坐标:\n"))
 loc_y = eval(input("请输入特殊点纵坐标:\n"))
 size = 2 ** (2 * k)
 b = Board(size, loc_x, loc_y)
 b.fill(0, 0, size, loc_x, loc_y)
 b.visualize()
 print(b.board)

GitHub链接

总结

到此这篇关于python实现棋盘覆盖问题及可视化的文章就介绍到这了,更多相关Python棋盘覆盖问题内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python实现棋盘覆盖问题及可视化

本文链接: https://lsjlt.com/news/121569.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python实现棋盘覆盖问题及可视化
    问题介绍 棋盘覆盖问题,是一种编程问题。 如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分...
    99+
    2024-04-02
  • python怎么实现棋盘覆盖问题及可视化
    这篇文章主要介绍“python怎么实现棋盘覆盖问题及可视化”,在日常操作中,相信很多人在python怎么实现棋盘覆盖问题及可视化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么实现棋盘覆盖问题及...
    99+
    2023-06-13
  • Java基于分治算法实现的棋盘覆盖问题示例
    本文实例讲述了Java基于分治算法实现的棋盘覆盖问题。分享给大家供大家参考,具体如下:在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。四个L型骨牌如下图:棋盘...
    99+
    2023-05-30
    java 分治算法 棋盘覆盖
  • python如何实现实时可视化仪表盘
    这篇文章主要介绍python如何实现实时可视化仪表盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float...
    99+
    2023-06-14
  • 数据可视化中的Python问题及解决方法
    数据可视化中的Python问题及解决方法数据可视化是数据科学领域中一个非常重要的任务,通过可视化我们能够更直观地理解和分析数据,为决策提供有力的支持。Python作为一种流行的编程语言,在数据可视化方面有着广泛的应用。然而,在实践中,我们经...
    99+
    2023-10-22
    Python 问题 数据可视化 解决方法
  • pygame可视化幸运大转盘实现
    目录一、先搭个架子(一)黏贴背景图:(二)增加中间的圈圈(三)让大转盘自己动起来二、再加个指针,幸运的小指针(一)小指针不动,转盘动(二)转盘不动,小指针动三、增加随时数算法,实现随...
    99+
    2024-04-02
  • 利用python实现可视化大屏
    目录1、实践之轨迹地图2、最终制作出来的效果图3、大屏的由来下文要实现的可视化大屏内容:需要在地图上将我司船舶的轨迹展示出来。听起来很简单,一开始我也是这样想的。通过一些BI工具应该...
    99+
    2024-04-02
  • Python 轻松实现可视化大屏
    提到数据可视化,我们会想到 Plotly、Matplotlib、Pyecharts等可视化库,或者一些商用软件Tableau、FineBI等等。如果你希望操作更简单、展现效果更强大...
    99+
    2024-04-02
  • java实现马踏棋盘算法(骑士周游问题)
    骑士周游问题 在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。 解题思路 1、创建棋盘 chessBoard,是一个二维数组。2、将当前位置设置为已经访问,然后根据当...
    99+
    2024-04-02
  • python视频转化字节问题的完整实现
    目录步骤1、准备2. 材料3、按帧读取视频什么是指定要转换的区间、帧率?看下效果图总结废话不多说,直接开干! 抖音字符视频在今年火过一段时间。 反正我是始终忘不了那段刘耕宏老师本草纲...
    99+
    2024-04-02
  • python开发实时可视化仪表盘的示例
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程「Python+Dash快速web应用开发」的...
    99+
    2022-06-02
    python 可视化 python 可视化仪表盘
  • python flask数据可视化怎么实现
    这篇文章主要介绍了python flask数据可视化怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python flask数据可视化怎么实现文章都会有所收获,下面我们一...
    99+
    2024-04-02
  • 使用python实现三维图可视化
    这是学习tensorflow框架中遇到的知识,这里定义函数的时候选用的是将x和y封装起来,方便tensorflow求导。 要慢慢习惯这种写法 import numpy as np...
    99+
    2024-04-02
  • Python利用folium实现地图可视化
    folium的简介 用Python处理数据,然后用Folium将它在Leaflet地图上进行可视化。Folium能够将通过Python处理后的数据轻松地在交互式的Leaflet地图...
    99+
    2024-04-02
  • Python中怎样实现数据可视化
    本篇文章为大家展示了Python中怎样实现数据可视化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Matplotlib 是一个流行的 Python 库,可以用来很简单地创建数据可视化方案。但每次创建...
    99+
    2023-06-17
  • Python中怎么实现数据可视化
    这期内容当中小编将会给大家带来有关Python中怎么实现数据可视化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.成品图这个是监控服务器网速的***成果,显示的是下载与上传的网速,单位为M。爬虫的原理都...
    99+
    2023-06-17
  • Python中如何实现数据可视化
    今天就跟大家聊聊有关Python中如何实现数据可视化,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。热力图热力图(Heat Map)是数据的一种矩阵表示方法,其中每个矩阵元素的值通过一...
    99+
    2023-06-16
  • 如何用纯Python开发实时可视化仪表盘
    这篇文章主要讲解了“如何用纯Python开发实时可视化仪表盘”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用纯Python开发实时可视化仪表盘”吧!1  简介这是我的系列教程「...
    99+
    2023-06-15
  • Python echarts实现数据可视化实例详解
    目录1.概述2.安装3.数据可视化代码3.1 柱状图3.2 折线图3.3 饼图总结1.概述 pyecharts 是百度开源的,适用于数据可视化的工具,配置灵活,展示图表相对美观,顺滑...
    99+
    2024-04-02
  • Python实现数据可视化案例分析
    目录1. 问题描述2. 实验环境3. 实验步骤及结果1. 问题描述 对右图进行修改: 请更换图形的风格请将 x 轴的数据改为-10 到 10请自行构造一个 y 值的函数将直方图上的数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作