Algorithm-Renewed
This commit is contained in:
56
Algorithm/Divide&Conquer/BoardCover.cpp
Normal file
56
Algorithm/Divide&Conquer/BoardCover.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
int tile = 1; // <20><><EFBFBD>ڱ<EFBFBD><DAB1>Dz<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||
|
||||
void cover(vector<vector<int>>& board, int top_x, int top_y, int defect_x, int defect_y, int size) {
|
||||
if (size == 2) {
|
||||
for (int i = 0; i < 2; ++i)
|
||||
for (int j = 0; j < 2; ++j)
|
||||
if (top_x+i != defect_x || top_y+j != defect_y)
|
||||
board[top_x+i][top_y+j] = tile;
|
||||
tile++;
|
||||
return;
|
||||
}
|
||||
|
||||
int mid = size/2;
|
||||
int cx = top_x + mid;
|
||||
int cy = top_y + mid;
|
||||
|
||||
// <20>ж<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
int quadrant = 0;
|
||||
if (defect_x < cx && defect_y < cy) quadrant = 0; // <20><><EFBFBD><EFBFBD>
|
||||
else if (defect_x < cx && defect_y >= cy) quadrant = 1; // <20><><EFBFBD><EFBFBD>
|
||||
else if (defect_x >= cx && defect_y < cy) quadrant = 2; // <20><><EFBFBD><EFBFBD>
|
||||
else quadrant = 3; // <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>L<EFBFBD><EFBFBD><CDB9>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB5><EFBFBD><EFBFBD>Ľ<EFBFBD>
|
||||
if (quadrant != 0) board[cx-1][cy-1] = tile;
|
||||
if (quadrant != 1) board[cx-1][cy] = tile;
|
||||
if (quadrant != 2) board[cx][cy-1] = tile;
|
||||
if (quadrant != 3) board[cx][cy] = tile;
|
||||
tile++;
|
||||
|
||||
// <20>ݹ<EFBFBD><DDB9>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cover(board, top_x, top_y, quadrant==0?defect_x:cx-1, quadrant==0?defect_y:cy-1, mid); // <20><><EFBFBD><EFBFBD>
|
||||
cover(board, top_x, top_y+mid, quadrant==1?defect_x:cx-1, quadrant==1?defect_y:cy, mid); // <20><><EFBFBD><EFBFBD>
|
||||
cover(board, top_x+mid, top_y, quadrant==2?defect_x:cx, quadrant==2?defect_y:cy-1, mid); // <20><><EFBFBD><EFBFBD>
|
||||
cover(board, top_x+mid, top_y+mid, quadrant==3?defect_x:cx, quadrant==3?defect_y:cy, mid); // <20><><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
int main() {
|
||||
int k = 3; // 2^3 x 2^3 <20><><EFBFBD><EFBFBD>
|
||||
int n = 1<<k;
|
||||
vector<vector<int>> board(n, vector<int>(n, 0));
|
||||
|
||||
int defect_x = 2, defect_y = 3; // ȱ<><C8B1>λ<EFBFBD><CEBB>
|
||||
cover(board, 0, 0, defect_x, defect_y, n);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (auto &row : board) {
|
||||
for (auto &x : row) cout << x << "\t";
|
||||
cout << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user