Algorithm-Renewed

This commit is contained in:
e2hang
2025-09-13 22:37:17 +08:00
parent 265b8af720
commit 7b6acef275
14 changed files with 778 additions and 1 deletions

View 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";
}
}