Cod sursa(job #380104)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 4 ianuarie 2010 20:37:09
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

int p[25];
int i, sw, k, m, j, n;

bool valid(void)
{
	return 1;
}
void print(void)
{
	for(i = 1; i <= n; ++i)
		printf("%d ", p[i]);
	printf("\n");
}
void solveProblem(void)
{
	for(i = 1; i <= n; i++)
		p[i] = i;
	
	if(valid())
		print();
	do
	{
		i = n - 1;
		sw = 1;
		while((sw) && (p[i] > p[i+1]))
		{
			--i;
			if(!i)
				sw = 0;
		}
		k = n;
		while(p[i] > p[k])
			--k;
		
		swap(p[i], p[k]);
		m = (n-i) / 2;
		
		for(j = 1; j <= m; j++)
			swap(p[i+j], p[n+1-j]);
	
	if(sw)
		if(valid())
			print();
		
	}while(sw);
	
}
int main(void)
{
	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);
	scanf("%d", &n);
	
	solveProblem();
	
	return 0;
}