题目描述:k*k的棋盘用L型的纸片覆盖,使得棋盘能够完全覆盖,找到最优解法(纸片不分颜色)
以最典型的4X4棋盘为例,从第二行第二列进行分割,将特殊方格所在的小棋盘填充完全后便可轻易得到问题最优解
分治思想:将问题分解为规模较小的且完全相同的子问题进行分别求解最终得到问题的最有解法
c代码如图,
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int g[N][N];
int size,dx,dy;
int title=1;
void answer(int lx,int ly,int dx,int dy,int size)
{
if(size==1)
return;
int s=size/2;
int t=title++;
if(dx<lx+s&&dy<ly+s) //左上角
{
answer(lx,ly,dx,dy,s);
}
else
{
g[lx+s-1][ly+s-1]=t;
answer(lx,ly,lx+s-1,ly+s-1,s);
}
if(dx<lx+s&&dy>=ly+s)//右上角
{
answer(lx,ly+s,dx,dy,s);
}
else
{