Pagini recente » Cod sursa (job #2549517) | Cod sursa (job #500896) | Cod sursa (job #350520) | Cod sursa (job #671859) | Cod sursa (job #18691)
Cod sursa(job #18691)
#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;
}