Source Code:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1024;
int board[N][N],count;
void cover(int sx,int sy,int cx,int cy,int size,int cx1[],int cy1[])
{
int midx=sx+size,midy=sy+size;
if(cx<midx&&cy<midy)
{
cx1[0]=cx;cy1[0]=cy;
cx1[1]=midx-1; cy1[1]=midy;
cx1[2]=midx; cy1[2]=midy-1;
cx1[3]=midx; cy1[3]=midy;
board[cx1[1]][cy1[1]]=count;
board[cx1[2]][cy1[2]]=count;
board[cx1[3]][cy1[3]]=count;
}
else if(cx<midx&&cy>=midy)
{
cx1[0]=midx-1; cy1[0]=midy-1;
cx1[1]=cx; cy1[1]=cy;
cx1[2]=midx; cy1[2]=midy-1;
cx1[3]=midx; cy1[3]=midy;
board[cx1[0]][cy1[0]]=count;
board[cx1[2]][cy1[2]]=count;
board[cx1[3]][cy1[3]]=count;
}
else if(cx>=midx&&cy<midy)
{
cx1[0]=midx-1; cy1[0]=midy-1;
cx1[1]=midx-1; cy1[1]=midy;
cx1[2]=cx; cy1[2]=cy;
cx1[3]=midx; cy1[3]=midy;
board[cx1[0]][cy1[0]]=count;
board[cx1[1]][cy1[1]]=count;
board[cx1[3]][cy1[3]]=count;
}
else
{
cx1[0]=midx-1; cy1[0]=midy-1;
cx1[1]=midx-1; cy1[1]=midy;
cx1[2]=midx; cy1[2]=midy-1;
cx1[3]=cx; cy1[3]=cy;
board[cx1[0]][cy1[0]]=count;
board[cx1[1]][cy1[1]]=count;
board[cx1[2]][cy1[2]]=count;
}
count++;
}
void TileBoard(int sx,int sy,int cx,int cy,int size)
{//(sx,sy) represents start point, (cx,cy) is covered point
if(size==1)
return;
int cx1[4],cy1[4];
size/=2;
cover(sx,sy,cx,cy,size,cx1,cy1);
TileBoard(sx,sy,cx1[0],cy1[0],size);
TileBoard(sx,sy+size,cx1[1],cy1[1],size);
TileBoard(sx+size,sy,cx1[2],cy1[2],size);
TileBoard(sx+size,sy+size,cx1[3],cy1[3],size);
}
void print(int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
printf("%2d ",board[i][j]);
printf("%2d/n",board[i][j]);
}
printf("/n");
}
int main()
{
printf("为简化代码,我假定你的输入是正确的!输入以0,0,0结束。/n");
while(1)
{
printf("请输入起点坐标:");
int x,y;
scanf("%d%d",&x,&y);
int size;
printf("请输入棋盘大小:");
scanf("%d",&size);
if(x==0&&y==0&&size==0)
break;
memset(board,0,sizeof(board));
board[x][y]=-1;
count=0;
TileBoard(0,0,x,y,size);
printf("Answer:/n");
print(size);
}
return 0;
}
测试:
为简化代码,我假定你的输入是正确的!输入以0,0,0结束。
请输入起点坐标:0 0
请输入棋盘大小:2
Answer:
-1 0
0 0
请输入起点坐标:3 3
请输入棋盘大小:4
Answer:
1 1 2 2
1 0 0 2
3 0 4 4
3 3 4 -1
请输入起点坐标:0 0
请输入棋盘大小:0
Process returned 0 (0x0) execution time : 26.531 s
Press any key to continue.