0 && v>=n) {
k=k-1;
for(i=k, v=c[k]; ip[1]) existe=0;
else {
existe=1;
d=p[0]; p[0]=p[1]; p[1]=d;
}
}
else {
existe=permSuivante(p,np-1);
if(!existe) {
// Il faut changer le dernier élément de p;
existe=echangerPlusGrand(p[np-1],p,np-1);
}
}
return existe;
}
int echangerPlusGrand(int &d, int p[], int np) {
// Renvoie VRAI si p contient un entier e, strictement inférieur à d
// FAUX si tout élément de p est supérieur a d
// Si e existe, il est échangé avec d
// UTILISE trierOC
int i,iM,aux;
// Indices du min de p et du max
for(iM=-1, i=0; ip[iM]) iM=i;
if(iM==-1) return 0;
// échange
aux=p[iM]; p[iM]=d; d=aux;
trierOC(p,np);
return 1;
}
void trierOC(int t[], int nt) {
// Tri par ordre croissant (tri par insertion), des nt éléments de t
// Algorithme du 'tri insertion'
int tst; // taille du sous tableau trié
int val, j, k, im;
for( tst=1; tstj; k-- ) t[k+1]=t[k];
t[j+1] = val;
// ici t[0..tst-1,tStTtie] est trié
}
}
// = = = = = = = = = = = = = = = = = +
// Sous-parties d'un ensemble +
// = = = = = = = = = = = = = = = = = +
int sousInit( int ns, int s[]) {
// Initialisation de s pour obtenir ensuite les sous-parties d'un
// ensemble à ns éléments.
// VOIR sousSuivant
int i;
if(ns < 1) return 0;
for(i=0; i0);
if(correct) for(k=k+1;kn-pp; m--) {
// Tirer au sort un nombre a entre [0 m[, et échanger v[a] v[m-1]
a = rand()%m;
aux=v[a]; v[a]=v[m-1]; v[m-1]=aux;
// cout<1; m--) {
// Tirer au sort un nombre a entre [0 m[, et échanger v[a] v[m-1]
a = rand()%m;
aux=v[a]; v[a]=v[m-1]; v[m-1]=aux;
}
}
void sousAleatoire(int n, int v[MAX], int & p) {
// Génére un sous-ensemble pseudo-aléatoire de {0, 1, ... n-1}
// p est le nombre d'éléments du sous-ensemble tiré au sort
// {v[0], v[1] ... v[p-1]} sont les éléments tirés au sort
p = rand()%(1+n);
combAleatoire(p,n,v);
if(p>2) trierOC(v,p);
}
// = = = = = = = = = = = = = = = = = +
// Vérifications +
// = = = = = = = = = = = = = = = = = +
int main() {
// Génération aléatoire de sous-ensemble
int te[MAX], pe, ne;
srand(time(NULL));
ne=10; sousAleatoire(ne,te,pe); affTableau(pe,te); cout< > >"; cin.getline(new char[80],80);
return 0;
}
//fin generationCPS.cpp