Pagini recente » Cod sursa (job #182181) | Cod sursa (job #2751589) | Cod sursa (job #1388247) | Cod sursa (job #821624) | Cod sursa (job #1974597)
#include <cstdio>
#include <fstream>
#include <vector>
#define FIN "permutari.in"
#define FOUT "permutari.out"
using namespace std;
class Permut {
public:
Permut(int n): N(n), Stack(n+1){}
void print() {
for(int i = 1; i <= N; ++i) out<<Stack[ i ]<<" ";
out<<endl;
}
int solution(int level) {
return level == N;
}
int successor(int level) {
if(Stack[ level ] < N) {
Stack[ level ]++;
return 1;
}
return 0;
}
int valid(int level) {
for(int i = 1; i < level; i++)
if(Stack[ i ] == Stack[ level ]) return 0;
return 1;
}
void init(int level) {
//init to zero
Stack[ level ] = 0;
}
void back(int level) {
if(level == N + 1) {
print();
} else {
init(level);
while(successor(level))
if(valid(level))
back(level + 1);
}
}
void gen() {
back(1);
}
private:
vector<int> Stack;
int N, level;
};//end class
int main() {
int n;
ifstream in(FIN);
ofstream out(FOUT);
in>>n;
in.close();
Permut p(n);
p.gen();
fclose( stdout );
return(0);
};