更新第二题
This commit is contained in:
parent
ad465c2b7d
commit
bfebfc9c4a
|
@ -0,0 +1 @@
|
||||||
|
*.exe
|
|
@ -0,0 +1,106 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int state = 0;
|
||||||
|
int v[16];
|
||||||
|
char labels[4][16] = {"크뤼", "의", "鸞", "꽉"};
|
||||||
|
int re[16];
|
||||||
|
int xx[16];
|
||||||
|
int k = 0;
|
||||||
|
|
||||||
|
void pt(int state) {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
printf("%d ", (state >> i) & 1);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int validate_state(int state) {
|
||||||
|
int *f = malloc(sizeof(int) * 4);
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
f[i] = (state >> i) & 1;
|
||||||
|
// printf("%d ", f[i]);
|
||||||
|
}
|
||||||
|
// printf("\n");
|
||||||
|
if (!f[1] ^ f[2] && f[0] ^ f[1]) {
|
||||||
|
return 0;
|
||||||
|
} else if (!f[2] ^ f[3] && f[0] ^ f[2]) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int trans(int x, int undo) {
|
||||||
|
// 0 깊刻크뤼菱성법붉
|
||||||
|
// 1 깊刻던의법붉
|
||||||
|
// 2 깊刻던鸞법붉
|
||||||
|
// 3 깊刻던꽉법붉
|
||||||
|
int tmp_state = state;
|
||||||
|
if (x == 1) {
|
||||||
|
tmp_state = state ^ 3;
|
||||||
|
} else if (x == 2) {
|
||||||
|
tmp_state = state ^ 5;
|
||||||
|
} else if (x == 3) {
|
||||||
|
tmp_state = state ^ 9;
|
||||||
|
} else {
|
||||||
|
tmp_state = state ^ 1;
|
||||||
|
}
|
||||||
|
// pt(state);
|
||||||
|
// printf("%d > ", x);
|
||||||
|
// pt(tmp_state);
|
||||||
|
if (undo) {
|
||||||
|
v[tmp_state] = 0;
|
||||||
|
state = tmp_state;
|
||||||
|
re[--k] = 0;
|
||||||
|
xx[k] = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (validate_state(tmp_state) == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (v[tmp_state] == 0) {
|
||||||
|
v[tmp_state] = 1;
|
||||||
|
state = tmp_state;
|
||||||
|
xx[k] = x;
|
||||||
|
re[k++] = state;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dfs() {
|
||||||
|
// printf(">> %d\n", state);
|
||||||
|
if (state == 15) {
|
||||||
|
for(int i = 0; i < k; i++) {
|
||||||
|
printf("%d > ", xx[i]);
|
||||||
|
pt(re[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (trans(0, 0)) {
|
||||||
|
dfs();
|
||||||
|
trans(0, 1);
|
||||||
|
}
|
||||||
|
if (trans(1, 0)) {
|
||||||
|
dfs();
|
||||||
|
trans(1, 1);
|
||||||
|
}
|
||||||
|
if (trans(2, 0)) {
|
||||||
|
dfs();
|
||||||
|
trans(2, 1);
|
||||||
|
}
|
||||||
|
if (trans(3, 0)) {
|
||||||
|
dfs();
|
||||||
|
trans(3, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// freopen("data.in", "r", stdin);
|
||||||
|
// freopen("data.out", "w", stdout);
|
||||||
|
v[0] = 1;
|
||||||
|
dfs();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue