-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcieniowanie.c
46 lines (35 loc) · 1.03 KB
/
cieniowanie.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
// O(2^(2k))
// M(k) - nie jestem pewny
int pow2(int k) { return 1 << k; }
void wypelnij_cwiartke(int **m, int k, int x, int y, int przes, int sufiks) {
if (k == 0) {
m[x][y] = sufiks;
} else {
k--;
wypelnij_cwiartke(m, k, x, y, przes + 2, sufiks);
wypelnij_cwiartke(m, k, x + pow2(k), y + pow2(k), przes + 2, (1 << przes) + sufiks);
wypelnij_cwiartke(m, k, x + pow2(k), y, przes + 2, (2 << przes) + sufiks);
wypelnij_cwiartke(m, k, x, y + pow2(k), przes + 2, (3 << przes) + sufiks);
}
}
int **cieniowanie(int k) {
int **m = (int **)malloc(sizeof(int *) * (size_t)pow2(k));
for (int i = 0; i < pow2(k); i++)
m[i] = (int *)malloc(sizeof(int) * (size_t)pow2(k));
wypelnij_cwiartke(m, k, 0, 0, 0, 0);
return m;
}
int main() {
int k;
if(!scanf("%d", &k)) printf("wrong input");
int **m = cieniowanie(k);
for (int y = 0; y < (1 << k); y++) {
for (int x = 0; x < (1 << k); x++) {
printf("%d\t", m[x][y]);
}
printf("\n");
}
return 0;
}