void c_allperms(int *a, const int *nin, const int *fn){ const int n = *nin; int i; for(i=0 ; i<n ;i++){ a[i] = i+1; } for(i=1 ; i < (*fn) ; i++){ for(int j=0 ; j<n ; j++){ a[i*n + j] = a[(i-1)*n+j]; } nextperm (a+i*n, n); } }
int main() { int i, count; count = 0; for (i = 0; i < N; i++) a[i] = N - i - 1; do { count++; printf("%5d: ", count); for (i = N - 1; i >= 0; i--) printf("%4d", a[i]); printf("\n"); encode(); printf("%5d: ", count); for (i = N - 1; i > 0; i--) printf("%4d", a[i]); printf("\n"); decode(); printf("%5d: ", count); for (i = N - 1; i >= 0; i--) printf("%4d", a[i]); printf("\n\n"); } while (nextperm()); return EXIT_SUCCESS; }