#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int MAX = 32;
int A[MAX][MAX];
void dfs(int x, int y, int w, int v)
{
if(w == 1) {
A[x][y] = v;
return;
}
int tw = w/2;
dfs(x, y, tw, v);
dfs(x, y+tw, tw, v+tw);
dfs(x+tw, y, tw, v+tw);
dfs(x+tw, y+tw, tw, v);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("merge_sort.txt", "w", stdin);
#endif
int k;
while(scanf("%d", &k) == 1) {
int w = 1<<k;
dfs(0, 0, w, 1);
for(int i=0; i<w; i++) {
for(int j=0; j<w; j++) {
printf("%3d", A[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
算法竞赛入门经典 8.3.2循环日程表问题
最新推荐文章于 2024-03-02 12:23:34 发布
本文介绍了一种使用递归分治策略填充二维数组的方法。该方法通过将问题分解为更小的子问题来解决,并逐步构建解决方案。具体实现中,程序采用C/C++语言,利用递归函数dfs按特定顺序填充了一个大小为2^k x 2^k的矩阵。
3794

被折叠的 条评论
为什么被折叠?



