Pagini recente » Cod sursa (job #2429745) | Cod sursa (job #750396) | Cod sursa (job #2004963) | Cod sursa (job #1454530) | Cod sursa (job #2085362)
#include<iostream>
#include<fstream>
using namespace std;
int n;
int a[11]={0};
ifstream fin("permutari.in");
ofstream fout("permutari.out");
int v[11]={1};int l=1;int aux;
int k;
int f=1;
void afisare(int a[11])
{
for(int i=1;i<=n;i++) fout<<a[i]<<' ';
fout<<endl;
}
bool checksol(int a[11],int poz)
{
for(int i=1;i<poz;i++)
if(a[i]==a[poz]) return 0;
return 1;
}
bool checksol2(int a[11],int poz,int x)
{
for(int i=1;i<poz;i++)
if(a[i]==x) return 0;
return 1;
}
void fill(int poz)
{
/* if(l==1){
v[a[poz]]=0;
a[poz]=0;
}
else*/
for(aux=a[poz]+1;aux<=n;aux++)
{
if(v[aux]==0) {
if(aux>f)f=aux;
v[a[poz]]=0;
v[aux]=1;
a[poz]=aux;
//l=aux;
return;
//break;
}
}
v[a[poz]]=0;a[poz]=0;
}
void fill2(int poz)
{
for(f;f<=n;f++)
{
if(v[f]==0){
v[f]=1;a[poz]=f;break;
}
}
}
int findpsol(int a[11],int poz)
{
for(int i=a[poz]+1;i<=n;i++)
{
if(checksol2(a,poz,i)) {
return i;}}
return 0;
}
void findsol(int a[11],int poz)
{
for(int i=1;i<=n;i++)
if(v[i]==0) {
v[i]=1;
}
a[poz]=l;
}
void build(int a[11])
{
for(int i=k+1;i<=n;i++)
if(a[i]==0) {
fill2(i);
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++) {
a[i]=i;v[i]=1;}
k=n-1;
afisare(a);
l=1;
while(k!=0)
{
if(k==n-1){
v[a[k+1]]=0;a[k+1]=0;}
fill(k);
if(a[k]==0) k--;
else
{
build(a);
afisare(a);k=n-1;f=1;}
}
}