Pagini recente » Cod sursa (job #3195671) | Cod sursa (job #2978530) | Cod sursa (job #59676) | Borderou de evaluare (job #133033) | Cod sursa (job #995593)
Cod sursa(job #995593)
#include <stdio.h>
#include <stdlib.h>
FILE *f;
FILE *g;
int valid(int stack[8], int head, int max)
{
int i;
if (stack[head] > max)
return 0;
for (i = 0; i < head; i++)
{
if (stack[head] == stack[i])
return 0;
}
return 1;
}
void perm(int n)
{
int stack[8];
stack[0] = 1;
int head = 0;
int i;
if (n > 8)
{
return;
}
while (head >= 0)
{
for (i = 0; i <= head; i++)
printf("%d ", stack[i]);
// AFISARE SOLUTIE FINALA
if (head == n - 1 && valid(stack, head, n)) {
for (i = 0; i <= head; i++) {
fprintf(g, "%d ", stack[i]);
}
fprintf(g, "\n");
stack[head]++;
continue;
}
//INCERCAM PE ACELASI NIVEL, ALTA SOLUTIE
if (!valid(stack, head, n) && stack[head] <= n)
{
stack[head]++;
continue;
}
//ULTIMA SOLUTIE INCERCATA SI NU ESTE VALID
if (!valid(stack, head, n) && stack[head] > n)
{
head--;
stack[head]++;
continue;
}
if (valid(stack, head, n))
{
head++;
stack[head] = 1;
continue;
}
}
return;
}
int main() {
int n;
f = fopen("permutari.in", "r");
g = fopen("permutari.out", "w");
fscanf(f, "%d", &n);
perm(n);
fclose(f);
fclose(g);
}