Pagini recente » Cod sursa (job #1287133) | Cod sursa (job #333326) | Cod sursa (job #326854) | Cod sursa (job #186519) | Cod sursa (job #18692)
Cod sursa(job #18692)
#include <cstdio>
int N, paths = 0;
int C[512];
void Explore(int i, int c) {
if (i == 2 * N - 1) { // am terminat culorile
if (C[i - 1] == C[0]) { // am ajuns in camera de plecare
paths ++;
}
return;
}
// vreau sa intru intr-o camera de culoare C[i]
if (i >= N) { // nu mai pot merge mai adanc, fiindca nu as mai putea sa ma intorc
Explore(i + 1, c - 1);
return;
}
// pot merge mai adanc
if (C[i] == C[i - 2]) { // daca camera in care vreau sa merg are aceeasi culoare ca camera din care am venit
Explore(i + 1, c - 1); // merg inapoi
}
Explore(i + 1, c + 1);
}
int main(void) {
FILE *in = fopen("culori.in", "r");
fscanf(in, "%d", &N);
int i;
for (i = 0; i < N; ++ i) {
fscanf(in, "%d", &C[i]);
}
fclose(in);
Explore(0, 0);
FILE *out = fopen("culori.out", "w");
fprintf(out, "%d\n", paths);
fclose(out);
return 0;
}