Cod sursa(job #989175)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 25 august 2013 04:11:30
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
  
const string file = "permutari";
  
const string infile = file + ".in";
const string outfile = file + ".out";


vector<int> A;
int N;

void print(ostream& fout)
{
	for(int i = 0; i < N; i++)
	{
		fout << A[i] << " ";
		//cout << A[i] << " ";
	}
	fout << "\n";
	//cout << "\n";
}


bool nextPerm(vector<int>& A)
{

	for(int i = A.size() - 2; i >= 0; i--)
	{
		int j = i + 1;
		if(A[i] < A[j])
		{
			int k = A.size() - 1;
			while(A[i] > A[k]) k--;
			swap(A[i], A[k]);
			reverse(A.begin() + j, A.end());
			return true;
		}
	}
	return false;

}

int main()
{
	

	fstream fin(infile.c_str(), ios::in);
	fin >> N;
	A.resize(N);
	fin.close();
	

	for(int i = 0; i < N; i++)
	{
		A[i] = i + 1;
	}

	fstream fout(outfile.c_str(), ios::out);
	print(fout);
	while(nextPerm(A))
	{
		print(fout);
	}
	
	fout.close();
}