Cod sursa(job #852394)

Utilizator dany123Florea Daniel dany123 Data 11 ianuarie 2013 10:34:19
Problema Generare de permutari Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<iostream>
#include<fstream>
using namespace std;

int n;
int *v;
ifstream fin("permutari.in");
ofstream fout("permutari.out");

int valid (int k) { //returneaza 0 daca nr de pe pozitia k exista pe una din pozitiile 1..k-1
	for (int i=1;i<k;i++) {
			if (v[i]==v[k])
				return 0;
		}
	return 1;
}

void back (int k) {
	if (k<1) //dc primul nivel nu mai poate fi incrementat -> s-a term
		return;
	if (k == n+1) {
		for (int i=1;i<=n;i++)
			fout<<v[i]<<' ';
		fout<<'\n';
		v[k]=0; //dc am gasit o sol, niv crt il fac 0
		back(k-1);
	}
	else {
		if (v[k]<n) { //daca nr crt e mai mic decat n
			v[k]++; //il incrementam
			if (!valid(k)) //daca nu e valid
				back(k); //incercam urmatorul nr de pe nivelul crt
			else
				back(k+1); // daca e valid, trecem la niv urmator
		}
		else { //daca nr crt nu e mai mic decat n
			v[k]=0; //il facem 0
			back(k-1); //si trecem la nivelul anterior
		}
		
	}
}

int main () {
	fin>>n;
	v = new int[n+1];
	for (int i=0;i<=n;i++)
		v[i]=0;
	back(1);
	fin.close();
	fout.close();
	//system("PAUSE");
}