#include <iostream>
#include <stdio.h>
using namespace std;
static int tile=1;
static int board[16][16]={0};
chess_board(int fh,int fl,int tfh,int tfl,int size){
if(size==1)
return ;
int t=tile++;
int sz=size/2; //分割
//左上角
if(tfh<fh+sz&&tfl<fl+sz) //特殊方格在左上角
chess_board(fh,fl,tfh,tfl,sz);
else {//特殊方格不在左上角,为了递归,假设右下角为特殊方格,再递归
board[fh+sz-1][fl+sz-1]=t;
chess_board(fh,fl,fh+sz-1,fl+sz-1,sz);
}
//右上角
if(tfh<fh+sz&&tfl>=fl+sz) //特殊方格在右上角
chess_board(fh,fl+sz,tfh,tfl,sz);
else {//特殊方格不在右上角,为了递归,假设左下角为特殊方格,再递归
board[fh+sz-1][fl+sz]=t;
chess_board(fh,fl+sz,fh+sz-1,fl+sz,sz);
}
//左下角
if(tfh>=fh+sz&&tfl<fl+sz) //特殊方格在左下角
chess_board(fh+sz,fl,tfh,tfl,sz);
else {//特殊方格不在左下角,为了递归,假设右上角为特殊方格,再递归
board[fh+sz][fl+sz-1]=t;
chess_board(fh+sz,fl,fh+sz,fl+sz-1,sz);
}
//右下角
if(tfh>=fh+sz&&tfl>=fl+sz) //特殊方格在右下角
chess_board(fh+sz,fl+sz,tfh,tfl,sz);
else {//特殊方格不在右下角,为了递归,假设左上角为特殊方格,再递归
board[fh+sz][fl+sz]=t;
chess_board(fh+sz,fl+sz,fh+sz,fl+sz,sz);
}
}
//main函数
int main(){
int i;
int j;
chess_board(0,0,4,5,16);
cout.setf(ios::left);
for(i=0;i<16;i++){
for(j=0;j<16;j++){
cout.width(4);
cout<<board[i][j];
}
cout<<endl;
}
}