Pagini recente » Cod sursa (job #2891657) | Cod sursa (job #1855147) | Cod sursa (job #367450) | Cod sursa (job #511768) | Cod sursa (job #1010649)
#include <stdio.h>
int isPerm(int* v, int *b, int n)
{
for(int i = 0; i < n; i++)
b[i] = 0;
for(int i = 0; i < n; i++)
{
b[v[i]]++;
if(b[v[i]] > 1)
return 0;
}
return 1;
}
int inc(int* v, int n, int i)
{
if(i == n) return 0;
v[n-i-1]++;
if(v[n-i-1] == n)
{
v[n-i-1] = 0;
inc(v, n, i+1);
}
}
int fact (int n)
{
int b = 1;
for(int i = 2; i <= n; i++)
b*=i;
return b;
}
int main()
{
int n;
FILE* fr = fopen("permutari.in", "r");
FILE* fw = fopen("permutari.out", "w");
fscanf(fr, "%d", &n);
int *A = new int[n];
int *B = new int[n];
for(int i = 0; i < n; i++)
A[i] = i;
int facto = fact(n);
int k = 0;
bool isPerm;
while(facto > k)
{
isPerm = true;
for(int i = 0; i < n; i++)
B[i] = 0;
for(int i = 0; i < n; i++)
{
B[A[i]]++;
if(B[A[i]] > 1)
{
isPerm = false;
break;
}
}
if(isPerm)
{
k++;
for(int i = 0; i < n; i++)
fprintf(fw, "%d ", A[i] + 1);
fprintf(fw, "\n");
}
int i = 1;
while(i <= n)
{
A[n-i]++;
if(A[n-i] == n)
{
A[n-i] = 0;
i++;
}
else
break;
}
}
return 0;
}