Cod sursa(job #1458175)

Utilizator aimrdlAndrei mrdl aimrdl Data 7 iulie 2015 03:01:08
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

int n;
int v[8];

inline void swap (int &a, int &b) {
	int c = a;
	a = b;
	b = c;
}

inline int next () {
	int i, found = 0;
	for (i = n - 2; i >= 0; --i) {
		if (v[i] < v[i+1]) {
			found = 1;
			break;
		}
	}
	
	if (!found) return 0;
	
	int a = i; //swap index 1
	
	for (i = n - 1; i >= 0; --i) {
		if (v[i] > v[a]) break;
	}
	
	int b = i; //swap index 2
	
	swap (v[a], v[b]);
	
	int j;
	for (i = a + 1, j = n-1; i < j; ++i, --j) {
		swap (v[i], v[j]);
	}
	
	return 1;
}
		
int main (void) {
	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);
	
	cin >> n;
	
	for (int i = 0; i < n; ++i) {
		v[i] = i + 1;
	}
	
	do {
		for (int i = 0; i < n; ++i) {
			cout << v[i] << " ";
		}
		cout << "\n";
	} while (next());
	
	return 0;
}