您的位置:首页 > 其它

棋盘覆盖

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); 

  

 }

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: