棋盘覆盖问题-递归分治

棋盘覆盖问题-递归分治_第1张图片

输入:3  3   4

输出:如图

x=3 ,y=3代表特殊方块的坐标(坐标原点在坐标系左上角)

如图也就是一个 size=4 的L型骨牌的棋盘覆盖问题。

#include 
#include 

using namespace std;

 int Board[20][20];
  int tile=1;
void ChessBoard(int tr,int tc,int dr,int dc,int size){


    if(size==1)
    return;

    int t =tile++;
    int s=size/2;
    //覆盖左上子棋盘
    if(dr=tc+s)
            //特殊方格在此棋盘中
     ChessBoard(tr,tc+s,dr,dc,s);
    else{   //此棋盘无特殊方格
     Board[tr+s-1][tc+s]=t;

    ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
    }

    //覆盖左下子棋盘
    if(dr>=tr+s && dc=tr+s && dc>=tc+s)
            //特殊方格在此棋盘中
     ChessBoard(tr+s,tc+s,dr,dc,s);
    else{   //此棋盘无特殊方格
     Board[tr+s][tc+s]=t;

    ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
    }

}



int main()
{
    int dr,dc,size,i,j;

    cin>>dr>>dc>>size; //3 3 4
    Board[dr][dc]=0;
     ChessBoard(1,1,dr,dc,size);
     for(i=1;i<20;i++){
        for(j=1;j<20;j++)
        printf("%3d",Board[i][j]);
        cout<


你可能感兴趣的:(算法)