[C] Generare permutazioni di un vettore di interi

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

[C] Generare permutazioni di un vettore di interi

Messaggio da Carlit0sway+ »

Buonasera a tutti.  :)

Ho sottomano un vettore di interi: mettiamo siano le capacità in litri di singoli contenitori.

Mi occorrerebbe effettuare tutte le permutazioni possibili che possono generarsi attraverso SOLO operazioni di:

Io ho già implementato le suddette operazioni: non mi viene in mente un algoritmo per generare le combinazioni.
Qualche idea?  ::) Grazie a tutti!
Ultima modifica di Carlit0sway+ il martedì 5 gennaio 2010, 9:04, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [C] Generare permutazioni di un vettore di interi

Messaggio da Zoff »

Vediamo se ho capito...

Se i contenitori possono essere pieni o vuoti direi che è come avere di fronte una stringa binaria (1=contenitore pieno 0=contenitore vuoto)

Il senso di quei vincoli è che avendo ad esempio 4 contenitori e partendo da 0100 le uniche sequenze ammissibili successive sono:
0000 -> svuotamento
0110 -> riempimento
0101 -> riempimento
1100 -> riempimento
1000 -> travaso
0010 -> travaso
0001 -> travaso

Giusto?

EDIT: Ok penso di essere arrivato ora a capire che i contenitori possono avere capienze differenti dall'esempio che hai fatto
Ultima modifica di Zoff il giovedì 31 dicembre 2009, 10:02, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

Re: [C] Generare permutazioni di un vettore di interi

Messaggio da Carlit0sway+ »

Zoff ha scritto: Vediamo se ho capito...

Se i contenitori possono essere pieni o vuoti direi che è come avere di fronte una stringa binaria (1=contenitore pieno 0=contenitore vuoto)

Il senso di quei vincoli è che avendo ad esempio 4 contenitori e partendo da 0100 le uniche sequenze ammissibili successive sono:
0000 -> svuotamento
0110 -> riempimento
0101 -> riempimento
1100 -> riempimento
1000 -> travaso
0010 -> travaso
0001 -> travaso

Giusto?

EDIT: Ok penso di essere arrivato ora a capire che i contenitori possono avere capienze differenti dall'esempio che hai fatto
Sì esatto, hanno una capacità non fissata a priori. ...
Ultima modifica di Carlit0sway+ il martedì 5 gennaio 2010, 9:04, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [C] Generare permutazioni di un vettore di interi

Messaggio da Zoff »

Direi allora che la cosa più semplice è creare una funzione che controlla in fila ogni contenitore e vede che azioni può fare (riempimento, svuotamento traslazione) applica una di queste trasformazioni e poi richiama ricorsivamente se stessa poi continua ad applicarle e richiamare ricrosivamente.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Carlit0sway+
Prode Principiante
Messaggi: 92
Iscrizione: martedì 16 dicembre 2008, 17:26

Re: [C] Generare permutazioni di un vettore di interi

Messaggio da Carlit0sway+ »

Zoff ha scritto: Direi allora che la cosa più semplice è creare una funzione che controlla in fila ogni contenitore e vede che azioni può fare
In che senso? non ho ben capito.

Queste sono le mie funzioni.

Codice: Seleziona tutto

...
Ultima modifica di Carlit0sway+ il martedì 5 gennaio 2010, 9:05, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti