Cod sursa(job #505096)

Utilizator sunt_emoSunt emo sunt_emo Data 30 noiembrie 2010 18:42:23
Problema Generare de permutari Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>

void next_permutation (short *,short);

int main () {
	FILE *in,*out;
	short N,a[]={1,2,3,4,5,6,7,8,0},i; long n=1;
	in=fopen ("permutari.in","r"); out=fopen ("permutari.out","w");
	fscanf (in,"%d",&N);
	for (i=1; i<=N; i++) {
		a[i]=i;
		n*=i;
	}
	a[N+1]=0;
	for (i=1; i<N; i++) fprintf (out,"%d ",a[i]);
	fprintf (out,"%d\n",a[N]);
	while (n-1) {
		next_permutation (a,N);
		for (i=1; i<N; i++) fprintf (out,"%d ",a[i]);
		fprintf (out,"%d\n",a[N]);
		n--;
	}
	fclose (in); fclose (out);
}

void next_permutation (short *a,short N) {
	int i=N,j,L,k;
	while (a[i]<a[i-1]) i--;
	L=i;
	k=(L+N+1)/2;
	while (a[i]>a[L-1]) i++;
	j=a[L-1]; a[L-1]=a[i-1]; a[i-1]=j;
	for (i=0; L+i<k; i++) {
		j=a[L+i]; a[L+i]=a[N-i]; a[N-i]=j;
	}
}