1.题目描述:残缺棋盘问题
2.解题分析:
利用分治算法将棋盘细化,逐步解决。首先判断残缺的位置在哪里,然后在中间填上对应的三格板,然后通过中间将其分成了小残缺棋盘,从而问题得以解决
3.代码实现:
#include <stdio.h>
#include <math.h>
void TileBoard(int tr,int tc,int dr,int dc,int size);
void OutputBoard(int size);
int tile=1;
int Board[1025][1025];
int main()
{
int n,a,b;
scanf("%d",&n);//输入2的幂次
int sum;
sum=pow(2,n);
scanf("%d %d",&a,&b);
Board[sum-a-1][b-1]=0;
TileBoard(0,0,a-1,b-1,sum);
OutputBoard(sum);
return 0;
}
void TileBoard(int tr,int tc,int dr,int dc,int size)
{ //覆盖残缺棋盘
if(size==1) return;
int t=tile++, //所使用的三格板的数目
s=size/2;//象限大小
//覆盖左上象限
if(dr<tr+s&&dc<tc+s) //残缺方格位于本象限
TileBoard(tr,tc,dr,dc,s);
else
{ //本象限中没有残