Problema Permutazioni

Salve…stavo risolvendo quasi palindromi tuttavia ho un problema nel generare le permutazioni… Ho comparato il codice della funzione ricorsiva con quello presente nella guida del prof Bugatti ed è identica… non capisco come mai mi generi le permutazioni in modo errato… Ho riscritto la funzione su un altro file che dovrebbe generare le permutazioni su un vettore={1,2,3} ma non va… Spero riusciate a illuminarmi

#include <iostream>
using namespace std;
#define maxn 8
int v[maxn];
int perm[maxn];
bool usate[maxn];

void permuta(int pos){
	
	for(int i=0; i<3; i++){
		if (pos == 0 || usate[i] == false){
			perm[pos] = v[i];
			usate[i] = true;
			permuta(pos + 1);
			usate[i] = false;
		}
	}
}

int main(){
	int i,j;
	int n=3;
	for(i=0; i<n; i++){
		v[i]=i+1;
		usate[i]=false;
	}
	permuta(0);
	return 0;
}

Ti scrivo un semplice codice che funziona sugli array…pensa tu a come trasformarlo per renderlo utile nel tuo caso.

void permutazioni(array[], int size)
{
     if(size==1)
     {
            //permutazione completa
    }
for(int i=0; i<size; i++)
{
permutazioni(array, size-1);

if(size%2)
     scambia(array[0], array[size-1)];//a te scrivere la funzione scambia...
else
     scambia(array[i], array[size-1]);
}
}

Ciao, ti propongo questo metodo molto semplice da implementare per la generazione di permutazioni (in questo caso su un array ma con delle semplici modifiche si può fare anche su liste).
https://pastebin.com/m4K82JjQ
La funzione andrebbe richiamata con parametro iniziale 0 (corrisponde alla dimensione dell’array che mantiene la permutazione attuale. Nel caso tu non sia pratico con le classi della STL (come vector) puoi usare questa variante che usa un vettore stile C.
https://pastebin.com/jq9NGAwu
Ti resta solo da implementare i controlli per verificare che il rettangolo ottenuto sia quasi palindromo. :wink:

2 Mi Piace

Grazie mille… alla fin dei conti il codice è uguale… l’unica differenza è che io non ritornavo la funzione nel caso in cui ottenessi una permutazione di lunghezza massima, visto che era void pensavo fosse uguale