算法之棋盤覆蓋問題--java版

package Hell.hao;函數

public class ChessBoard {spa

/*int tr;
int tc;//棋盤左上角方格的行列
int dr;
int dc;//分別是特殊方格的行和列*/
int SIZE;
int [][]board;
int count=1;

ChessBoard(){}
ChessBoard(int size){
    SIZE=size;
    board=new int[SIZE][SIZE];
}

public void chessBoard(int tr,int tc,int dr,int dc,int size){
    if(size==1)
        return;
    int cover=count++;
    int s=size/2;
    if(dr<tr+s&&dc<tc+s){
        chessBoard(tr,tc,dr,dc,s);
    }//特殊方格在左上角
    else{
        board[tr+s-1][tc+s-1]=cover;//用L形覆蓋其右下角
        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]=cover;
        chessBoard(tr,tc+s,tr+s-1,tc+s,s);
    }
    
    if(dr>=tr+s&&dc<tc+s){
        chessBoard(tr+s,tc,dr,dc,s);//tr+s做爲左下角
    }
    else{
        board[tr+s][tc+s-1]=cover;
        chessBoard(tr+s,tc,tr+s,tc+s-1,s);//左下角
    }
    /*
    www.tengxunyun.me
    小兔子騰訊雲:轉載請告知
    */
    if(dr>=tr+s&&dc>=tc+s){
        chessBoard(tr+s,tc+s,dr,dc,s);
    }
    else{
        board[tr+s][tc+s]=cover;//覆蓋左上角
        chessBoard(tr+s,tc+s,tr+s,tc+s,s);//沒有的話覆蓋其餘方格
    }
}

public void show(){
    for(int i=0;i<SIZE;i++){
        for(int j=0;j<SIZE;j++){
            if(j==0){
                System.out.print(board[i][j]);
            }
            else{
                System.out.printf("%4d",board[i][j]);
            }
        }
        System.out.println();
        System.out.println();
    }
}

}code

/*
    www.quzhuanpan.com
    去轉盤網:轉載請告知
*/

主函數:
package Hell.hao;seo

public class Application_01 {ip

public static void main(String args[]){
    ChessBoard cb =new ChessBoard(4);
    cb.board[2][2]=0;
    cb.chessBoard(0,0,2,2,4);
    cb.show();
 }

}
運行結果:it

clipboard.png

相關文章
相關標籤/搜索