棋盘覆盖
2012-12-10 18:10
204 查看
第一次写博客,还请各位大牛多多指教。初学java,还在进步中,正在学算法,觉得还可以,就敲了敲,希望对和我一样正在奋斗的学习者有用。
//题目是:棋盘覆盖
public class ChessBoard {
static int board_size=4;
static int tile=1;
static int [][] board=new int[board_size][board_size];
public static void main(String[] args){
board[2][2]=0;
chessBoard(0,0,2,2,board_size);
for(int i=0;i<board_size;i++){
for(int j=0;j<board_size;j++){
System.out.printf("%-4d",board[i][j]);
}
}
}
//分之策略算法
public static void chessBoard(int tr,int tc,int dr,int dc,int size){
if(size==1) return;
int s;
int t=tile; //L型骨牌号
tile++;
s=size/2; //分割棋盘
//左上角子棋盘覆盖
if(dr<tr+s&&dc<tc+s){
chessBoard(tr,tc,dr,dc,s);
}
else{
board[tr+s-1][tc+s-1]=t;
chessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
//右上角子棋盘覆盖
if(dr<tr+s&&dc>=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<tc+s){
chessBoard(tr+s,tc,dr,dc,s);
}
else{
board[tr+s][tc+s-1]=t;
chessBoard(tr+s,tc,tr+s,tc+s-1,s);
}
//右下角子棋盘覆盖
if(dr>=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);
}
}
}
//题目是:棋盘覆盖
public class ChessBoard {
static int board_size=4;
static int tile=1;
static int [][] board=new int[board_size][board_size];
public static void main(String[] args){
board[2][2]=0;
chessBoard(0,0,2,2,board_size);
for(int i=0;i<board_size;i++){
for(int j=0;j<board_size;j++){
System.out.printf("%-4d",board[i][j]);
}
}
}
//分之策略算法
public static void chessBoard(int tr,int tc,int dr,int dc,int size){
if(size==1) return;
int s;
int t=tile; //L型骨牌号
tile++;
s=size/2; //分割棋盘
//左上角子棋盘覆盖
if(dr<tr+s&&dc<tc+s){
chessBoard(tr,tc,dr,dc,s);
}
else{
board[tr+s-1][tc+s-1]=t;
chessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
//右上角子棋盘覆盖
if(dr<tr+s&&dc>=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<tc+s){
chessBoard(tr+s,tc,dr,dc,s);
}
else{
board[tr+s][tc+s-1]=t;
chessBoard(tr+s,tc,tr+s,tc+s-1,s);
}
//右下角子棋盘覆盖
if(dr>=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);
}
}
}