Cod sursa(job #282211)

Utilizator tomescu_alinTomescu Alin tomescu_alin Data 17 martie 2009 07:21:10
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
using namespace std;

#define NDEBUG

typedef unsigned char byte;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned long long ulonglong;

ostream * out;

template<class T>
void show (const vector<T>& v)
{
	copy(v.begin(), v.end(), ostream_iterator<T>(*out, " "));
	*out << "\n";
}

void generateAll (vector<ushort>& result, uint resultSize, uint pos = 0)
{
	for (uint i = 0; i < resultSize; i++)
	{
		vector<ushort>::iterator end = result.begin()+pos;
		if(find(result.begin(), end, i+1) != end)
			continue;
		
		result.at(pos) = i+1;
		
		if (pos < resultSize-1) {
			generateAll (result, resultSize, pos+1);
		} else {
			show(result);
		}
	}
}


int main()
{
	const char * inFile = "permutari.in";
	const char * outFile = "permutari.out";
	
	ifstream fin(inFile);
	ofstream fout(outFile);
	
	#ifndef NDEBUG
		if(!fin || !fout) {
			cerr << "Error opening one of \"" << inFile << "\" or \"" << outFile << "\"" << endl;
			return -1;
		}
	#endif
	
	ushort size;
	fin >> size;
	
	std::vector<ushort> result(size);
	out = &fout;
	
	generateAll (result, size);
	
	fout.close();
	fin.close();
		
	return 0;
}