【C语言】——残缺棋盘问题

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
    {    //本象限中没有残
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值