Cod sursa(job #2388824)

Utilizator gabriel.crosmanCrosman Gabriel gabriel.crosman Data 26 martie 2019 15:45:43
Problema Generare de permutari Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>	
#include <iostream>
#include <vector>
#include <unordered_map>
	
using namespace std;

ofstream fout("permutari.out");

class Permutari {

public:

	void solve() {
	
		read_input();
		
		vector<int>  domeniu, solutie;
		domeniu.reserve(n);

		int i;
		for (i = 0; i < n; i++) {	
			domeniu.push_back(i + 1);
		}

		perm(domeniu, solutie);
	
	}

private:

	int n;

	void read_input() {

		ifstream fin("permutari.in");
		fin >> n;
		fin.close();
	}

	bool printSol(vector<int> &solutie) {

		for (int s : solutie) {

			fout << s << " ";
		}
		
		fout << endl;
	}

	void perm(vector<int> &domeniu, vector<int> &solutie) {

		// daca domeniul e gol, atunci am generat toate solutiile

		if (domeniu.size() == 0) {
			
			printSol(solutie);
			
			return;
		}

		unsigned int i;

		for (i = 0; i < domeniu.size(); i++) {

			// retin elementul din domeniu
			int temp = domeniu[i];

			// il adaug in solutie
			solutie.push_back(temp);

			// sterg elementul din domeniu
			domeniu.erase(domeniu.begin() + i);

			// reapelez functia cu noua solutie, respectiv domeniu
			perm(domeniu, solutie);

			// refac domeniul si solutia
			domeniu.insert(domeniu.begin() + i, temp);
			solutie.pop_back();
		}
	}
};

int main() {

	Permutari perms;

	perms.solve();

	return 0;
}