棋盘覆盖
public class chess_cover {
private static int[][] matrix = new int[100][100];
private static int num = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入棋盘的大小:");
String Str_size = in.nextLine();
int size = Integer.parseInt(Str_size);
System.out.print("请输入特殊方格的位置:");
String Str_position = in.nextLine();
int row = Integer.parseInt(Str_position.split(" ")[0]);
int col = Integer.parseInt(Str_position.split(" ")[1]);
chess_board(0,0,row,col,size);
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
}
private static void chess_board(int tr,int tc,int dr,int dc,int size)
{
if(size==1)
return;
int s=size/2; //分割棋盘
int t=++num; //L型骨牌
if(dr<tr+s&&dc<tc+s){ //特殊方格在左上棋盘
chess_board(tr,tc,dr,dc,s);
}else { //特殊方格不在,在右下角设置特殊方格
matrix[tr+s-1][tc+s-1]=t;
chess_board(tr,tc,tr+s-1,tr+s-1,s);
}
if(dr>=tr+s&&dc<tc+s){
chess_board(tr+s,tc,dr,dc,s);
}else {
matrix[tr+s][tc+s-1]=t;
chess_board(tr+s,tc,tr+s,tc+s-1,s);
}
if(dr<tr+s&&dc>=tc+s){
chess_board(tr,tc+s,dr,dc,s);
}else {
matrix[tr+s-1][tc+s]=t;
chess_board(tr,tc+s,tr+s-1,tc+s,s);
}
if(dr>=tr+s&&dc>=tc+s){
chess_board(tr+s,tc+s,dr,dc,s);
}else {
matrix[tr+s][tc+s]=t;
chess_board(tr+s,tc+s,tr+s,tc+s,s);
}
}
}