|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Algoritmo di backtracking
Ciao.
Sto cercando di capire cosa avviene passo passo in questo algoritmo: Codice:
Funzione chiamante:
void gensec(int n, int k){
int t[n];
genseqrec(n,k,t,-1);
}
void genseqrec (int n, int k, int t[], int l){
int i;
if(l==n-1)
stampa(t);
else
for(i=1; i<=k; ++i){
t[l+1]=i;
genseqrec(n,k,t,l+1);
}
}
(1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) Il problema è che non riesco a capire quel ciclo for, cosa succede ad ogni iterazione. Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
scusa, ma che cosa non capisci???
è un classico esempio di ricorsione, non riesco a capire che cosa non hai capito..... Codice:
for(i=1; i<=k; ++i){
t[l+1]=i; --->qua metti in posizione l+1 il valore i, che viene
incrementatto per ogni for
genseqrec(n,k,t,l+1); ---> qua richiami la stessa funzione aumentando l di uno....
}
__________________
My gaming placement |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Non riesco a capire come si riempie il vettore.... come fa alla fine a generare quella sequenza?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ragionandoci meglio sopra, sono riuscito a capire come viene costruita ad ogni passo della ricorsione la sequenza. Grazie lo stesso
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
In effetti e' un codice piuttosto difficile. Immagino si tratti di un esercizio, visto che non c'e' altro motivo di generare un codice simile.
Comunque: si tratta di una procedura ricorsiva. - Base della ricorsione: l == n-1. Quando questo valore e' raggiunto, siamo sicuri di aver riempito il vettore degli n elementi necessari, pertanto lo si stampa e la ricorsione finisce li. - passo ricorsivo> l != n - 1 (ovviamente l < n-1) In questo caso, l'elemento corrente dell'array viene riempito e si demanda alla ricorsione il riempimento del resto. Il vettore riduce il numero di elementi da riempire fino ad arrivare alla base della ricorsione. Tutto qui High Flying Sottovento
__________________
In God we trust; all others bring data |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
non mi sembra però backtracking, nel senso che non torna indietro ma si propaga in una sola direzione.
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Quote:
__________________
My gaming placement |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:00.



















