Cod sursa(job #2085362)

Utilizator NesteazyNastasia Alexandru Nesteazy Data 10 decembrie 2017 00:09:08
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#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;}
		
		
	}
	
	
		
}