Cod sursa(job #2647879)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 7 septembrie 2020 00:25:40
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>

using namespace std;

int main() {
	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);

	int n, last = 0;
	scanf("%d", &n);
	int perms[n+2];
	bool inside[n+2];
	int used[n+2];

	for(int i=0; i<=n+1; ++i)
		perms[i] = used[i] = inside[i] = 0;
    inside[0] = 1;
	while(last >= 0) {
		if (last == n) {
			for(int i=1; i<=n; ++i)
				printf("%d ", perms[i]);
			printf("\n");
            inside[perms[last]] = false;
			used[last] = 0;
			--last;
		} else {
            while(inside[used[last]] && used[last] <=n)
                ++used[last];
            if (used[last] > n) {
                inside[perms[last]] = false;
                used[last] = 0;
                --last;
            } else {
                perms[last+1] = used[last];
                inside[used[last]] = true;
                ++used[last];
                ++last;
            }
		}
	}

	return 0;
}