棋盘覆盖问题可视化动图——python

#### 棋盘覆盖问题可视化动图——python

棋盘覆盖问题是一个经典的分治法解决的问题,具体内容可以参照以下博主的解析

棋盘覆盖算法解析

为了更好的理解该算法分治的过程

利用了python中的matplotlib库进行了该算法的可视化

avatar

具体动画可复制代码在本地运行查看

import matplotlib.pyplot as plt 
import numpy as np 

count=0
color=['yellow','green','blue','red','purple'] #颜色数组


def fill(x,y,t):

    xx=np.linspace(x,x+1,10)
    yy=np.linspace(y,y,10)
    yy1=np.linspace(y+1,y+1,10)
    plt.fill_between(xx,yy,yy1,facecolor=color[t%(len(color))]) #填充
    plt.text(x+0.5,y+0.5,t) #添加文字
    plt.pause(1) #动态画图 参数为变化的时间
    pass 


def ChessBoard(tr,tc,dr,dc,size):
    if size==1:  #算法实现
        return 
    global count
    global Board 
    count+=1
    t=count
    s=size//2
    if dr<tr+s and dc<tc+s:
        ChessBoard(tr,tc,dr,dc,s)
    else:
        Board[tr+s-1][tc+s-1]=t
        fill(tr+s-1,tc+s-1,t)
        ChessBoard(tr,tc,tr+s-1,tc+s-1,s)
    
    if dr<tr+s and dc>=tc+s:
        ChessBoard(tr,tc+s,dr,dc,s)
    else:
        Board[tr+s-1][tc+s]=t
        fill(tr+s-1,tc+s,t)
        ChessBoard(tr,tc+s,tr+s-1,tc+s,s)

    if dr>=tr+s and dc<tc+s:
        ChessBoard(tr+s,tc,dr,dc,s)
    else:
        Board[tr+s][tc+s-1]=t
        fill(tr+s,tc+s-1,t)
        ChessBoard(tr+s,tc,tr+s,tc+s-1,s)

    if dr>=tr+s and dc>=tc+s:
        ChessBoard(tr+s,tc+s,dr,dc,s)
    else:
        Board[tr+s][tc+s]=t
        fill(tr+s,tc+s,t)
        ChessBoard(tr+s,tc+s,tr+s,tc+s,s)

def pre():
    x=2**n
    y=2**n
    xx=np.linspace(x,x+1,10)
    yy=np.linspace(y,y,10)
    yy1=np.linspace(y+1,y+1,10)
    plt.fill_between(xx,yy,yy1,facecolor='white') 
    plt.pause(1)
    pass 

n=int(input())
Board=[[0 for i in range(2**n)] for j in range(2**n)]
x,y=map(int,input().split())
pre() #图像预处理
Board[x][y]=-1
ChessBoard(0,0,x,y,2**n)
for i in range(2**n):
    for j in range(2**n):
        print(Board[i][j],end=' ')
    print()

plt.show()
# n为正方形的阶数 x y为方格点的坐标
posted @   bean_boom  阅读(964)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示