亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現棋盤覆蓋問題及可視化

 更新時間:2021年03月12日 14:31:09   作者:Patrick_cyk  
這篇文章主要給大家介紹了關于python實現棋盤覆蓋問題及可視化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

問題介紹

棋盤覆蓋問題,是一種編程問題。

如何應用分治法求解棋盤覆蓋問題呢?分治的技巧在于如何劃分棋盤,使劃分后的子棋盤的大小相同,并且每個子棋盤均包含一個特殊方格,從而將原問題分解為規(guī)模較小的棋盤覆蓋問題。k>0時,可將2k×2k的棋盤劃分為4個2(k-1)×2(k-1)的子棋盤。這樣劃分后,由于原棋盤只有一個特殊方格,所以,這4個子棋盤中只有一個子棋盤包含該特殊方格,其余3個子棋盤中沒有特殊方格。為了將這3個沒有特殊方格的子棋盤轉化為特殊棋盤,以便采用遞歸方法求解,可以用一個L型骨牌覆蓋這3個較小棋盤的會合處,從而將原問題轉化為4個較小規(guī)模的棋盤覆蓋問題。遞歸地使用這種劃分策略,直至將棋盤分割為1×1的子棋盤。

問題解釋來源 百度

原網頁

效果展示

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

代碼實現

借助numpy處理數據,plot實現可視化。

使用面向對象的方法設計了棋盤類。

一步步將棋盤分為小區(qū)塊,指導區(qū)塊的邊長為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):
  '''
  遞歸函數填充棋盤或子棋盤(下文稱區(qū)塊)

  :param s_x: 區(qū)塊左上角x
  :param s_y: 區(qū)塊左上角y
  :param size: 區(qū)塊邊長
  :param c_x: 區(qū)塊特殊點坐標x
  :param c_y: 區(qū)塊特殊點坐標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)] # 代表四個子區(qū)塊
  for i in ls:
   if i != pos: # 如果不是原有特殊點所在區(qū)塊,則構造特殊點并填充
    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: # 如果不是原有特殊點所在區(qū)塊
    # 所構造特殊點位置(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: # 如果是原有特殊點所在區(qū)塊
    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棋盤覆蓋問題內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python采集熱搜數據實現詳解

    Python采集熱搜數據實現詳解

    這篇文章主要為大家介紹了Python采集熱搜數據實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 使用matlab 判斷兩個矩陣是否相等的實例

    使用matlab 判斷兩個矩陣是否相等的實例

    這篇文章主要介紹了使用matlab 判斷兩個矩陣是否相等的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python實現簡單的多任務mysql轉xml的方法

    Python實現簡單的多任務mysql轉xml的方法

    這篇文章主要介紹了Python實現簡單的多任務mysql轉xml的方法,結合實例形式分析了Python查詢mysql結果集轉xml格式數據輸出的相關操作技巧,需要的朋友可以參考下
    2017-02-02
  • python基礎while循環(huán)及if判斷的實例講解

    python基礎while循環(huán)及if判斷的實例講解

    下面小編就為大家?guī)硪黄猵ython基礎while循環(huán)及if判斷的實例講解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Django model class Meta原理解析

    Django model class Meta原理解析

    這篇文章主要介紹了Django model class Meta原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • python tkinter實現屏保程序

    python tkinter實現屏保程序

    這篇文章主要為大家詳細介紹了python tkinter實現屏保程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • calendar在python3時間中常用函數舉例詳解

    calendar在python3時間中常用函數舉例詳解

    這篇文章主要介紹了calendar在python3時間中常用函數的相關文章,對此知識點有興趣的朋友們可以學習下。
    2020-11-11
  • Pycharm中python調用另一個文件類或者函數

    Pycharm中python調用另一個文件類或者函數

    本文主要介紹了Pycharm中python調用另一個文件類或者函數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Pycharm掛代理后依舊插件下載慢的完美解決方法

    Pycharm掛代理后依舊插件下載慢的完美解決方法

    狠多朋友在使用Pycharm插件時,反應下載速度很慢,掛載了代理還是不夠,怎么解決這一問題呢,下面小編給大家代理了Pycharm插件下載慢的完美解決方法,需要的朋友參考下吧
    2021-08-08
  • Python使用Turtle模塊繪制五星紅旗代碼示例

    Python使用Turtle模塊繪制五星紅旗代碼示例

    這篇文章主要介紹了Python使用Turtle模塊繪制五星紅旗代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論