package FZ;
/*
2 0 3 3
2 2 1 3
4 1 1 1
4 4 1 1
棋盘一个特殊点用L型的棋子进行覆盖
//进行分治法计算 然后分成更小的 比如4分成2,2,2,2 的矩阵 然后进行继续分 分成1,1,1,1的标明其他非特殊点
*/
public class ChessBoradProblem {
private int[][] board;//棋盘
private int specialRow;//特殊的行
private int specialCol;//特殊的列、
private int size;
private int type=0;
public ChessBoradProblem(int specialRow,int specialCol,int size){
this.specialRow=specialRow;
this.specialCol=specialCol;
this.size=size;
this.board=new int[size][size];
}
/*
board棋盘
specialRow特殊行
specialCol特殊的列
leftRow矩阵最左边的行
leftCol矩阵最左边的列
size 棋盘的大小
*/
private void ChessBoard(int specialRow,int specialCol,int leftRow,int leftCol,int size){
if (size==1){
return;
}
int subsize=size/2;
type=type%4+1;
int n=type;
//特殊点在左上角
if (specialRow<leftRow+subsize&&specialCol<leftCol+subsize){
ChessBoard(specialRow,specialCol,leftRow,leftCol,subsize);
}else {
board[leftRow+subsize-1][leftCol+subsize-1]=n;
ChessBoard(leftRow+subsize-1,leftCol+subsize-1,leftRow,leftCol,subsize);
}
//特殊点在右上角
if (specialRow<leftRow+subsize&&specialCol>=leftCol+subsize){
ChessBoard(specialRow,specialCol,leftRow,leftCol+subsize,subsize);
}else {
board[leftRow+subsize-1][leftCol+subsize]=n;
ChessBoard( leftRow+subsize-1, leftCol+subsize, leftRow, leftCol+subsize, subsize);
}
//特殊点在左下角
if (specialRow>=leftRow+subsize&&specialCol<leftCol+subsize){
ChessBoard( specialRow, specialCol, leftRow+subsize, leftCol, subsize);
}else {
board[leftRow+subsize][leftCol+subsize-1]=n;
ChessBoard( leftRow+subsize, leftCol+subsize-1, leftRow+subsize, leftCol, subsize);
}
//特殊点在右下角
if (specialRow>=leftRow+subsize&&specialCol>=leftCol+subsize){
ChessBoard( specialRow, specialCol, leftRow+subsize, leftCol+subsize, subsize);
}else {
board[leftRow+subsize][leftCol+subsize]=n;
ChessBoard( leftRow+subsize, leftCol+subsize, leftRow+subsize, leftCol+subsize, subsize);
}
}
public void prentfBoard(){
ChessBoard(specialRow,specialCol,0,0,size);
for (int i = 0; i <board.length ; i++) {
for (int j = 0; j <board.length ; j++) {
System.out.print(board[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
int specialRow=0;
int specialCol=1;
int n=4;
ChessBoradProblem a=new ChessBoradProblem(specialRow,specialCol,n);
a.prentfBoard();
}
}
分治学习之棋盘覆盖问题(java)
猜你喜欢
转载自blog.csdn.net/microopithecus/article/details/85059335
今日推荐
周排行