貪心算法棋盤覆蓋

#include <iostream>
using namespace std;
const int BOARD_SIZE=8;
static int pile=1;
static int BOARD[BOARD_SIZE][BOARD_SIZE];
//tr:棋盤左上角行號
//tc:棋盤左上角列號
//dr:特殊方格行號
//dc:特殊方格列號
//pile:L形塊號碼
//
void chessboard(int tr,int tc,int dr,int dc,int size){
    if(size==1){
        return;
    }
    int t=pile++;
    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]=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,tr+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);
    }
}
void print(){
for(int i=0;i<BOARD_SIZE;i++){
    for(int j=0;j<BOARD_SIZE;j++){
        cout<<BOARD[i][j]<<" ";
    }
    cout<<endl;
}
}
int main()
{    chessboard(0,0,3,4,BOARD_SIZE);
     print();
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章