#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int s;
void dismiss(int* p, int n) {
int i, j, t= (int)pow(2, n - 1);
if (n == 1) {
*p = 0;
*(p + 1) = *(p + s) = *(p + s + 1) = 1;
}
else {
for (i = 0; i < t; i++)
for (j = 0; j < t; j++)
*(p + i * s + j) = 0;
dismiss(p + t, n - 1);
dismiss(p + s*t, n - 1);
dismiss(p + (s+1)*t, n - 1);
}
}
int main() {
int n, i, j;
scanf("%d", &n);
s = (int)pow(2, n);
int* p = (int*)calloc( s*s, sizeof(int));
dismiss(p, n);
for (i = 0; i < s; i++) {
for (j = 0; j < s-1; j++)
printf("%d ", *(p + i * s + j));
printf("%d\n", *(p + i * s + j));
}
free(p);
return(0);
}
洛谷P5461 赦免战俘经典解法
最新推荐文章于 2024-07-04 09:02:02 发布