链接
思路:
对于每一个小方阵,分别操作(取该方阵的左上角,把这部分设置成为已经赦免). z == 1时,递归结束.
参考代码:
#include <bits/stdc++.h>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin >> n;
n = (1 << n);
std::vector<std::vector<int>> a(n, std::vector<int>(n));
std::function<void(int, int, int)> dfs = [&](int x, int y, int z) {
if (z == 1) {
return;
}
for (int i = x; i < x + z / 2; i++) {
for (int j = y; j < y + z / 2; j++) {
a[i][j] = 1;
}
}
dfs(x + z / 2, y, z / 2);
dfs(x, y + z / 2, z / 2);
dfs(x + z / 2, y + z / 2, z / 2);
// 此处是递归剩余的三个正方形
};
dfs(0, 0, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
std::cout << (a[i][j] ? 0 : 1) << " \n"[j == n - 1];
}
}
return 0;
}