Ti ringrazio per avermi fatto notare che il programma chiama due volte la funzione path();
Per quanto riguarda il tuo input, il mio programma da 2 in output, quindi funziona correttamente
Non ho ben chiaro come funziona il tuo programma ma qui è dove ho il dubbio più grosso:
if(conc(sx[ind],dx[ind],sx[i],dx[i])==true && v[i]==false && i!=ind) //cambia forma vettore
se ho ben capito tu confronti il valori dx e sx di ind (l’ultima tessera inserita nella sequenza o la prima all’inizio) con quelli una delle altre non ancora utilizzate, però dopo il primo inserimento o il sx o il dx di ind è interno alla sequenza di tessere e non da controllare da lì in poi.
Cerco di spiegare meglio il mio dubbio con un esempio:
supponiamo di avere queste 3 tessere : 3 0, 4 0, 4 2
dopo l’unione della prima con la seconda (3 0-0 4) avremo sostanzialmente una maxi-tessera da due con a sx 3 e a dx 4 e la conc ora dovrebbe, almeno credo, controllare 3,4 con 4,2 ma a quello che ho visto in debug, alla conc vengono invece passati 0,4 e 4,2 nella prima coppia sx/dx ci sono i valori sx e dx di una tessera semplice (l’ultima aggiunta?) e non i veri estremi della sequenza di tessere finora creata.
L’input di cui mi parli- cioè l’esempio proposto- dovrebbe dare output 5 e non 6, quindi funziona correttamente.
Non credo che la “maxi tessera” sia proprio quello che si viene a formare. Io avvicino le tessere fra di loro poi però se confronto gli estremi devo sempre tener conto del fatto che ho unito le tessere, non posso mica fonderle cancellando i medi.
Fammi sapere se ho capito male io: potrebbe essere questo l’errore
Metti da parte la programmazione e pensa di giocare a domino:
esempio:hai queste 3 tessere 0-5, 3-0, 3-4
supponiamo di cominciare mettendo a tavola la 0-5, ora poi puoi solo mettere alla sua sinistra la 3-0 (senza ruotarla).
Ora puoi aggiungere solo una tessera che ha o un 3 o un 5 perchè la sequenza creata ora è 3-00-5.
Effettivamente ora è come se avessimo a tavola una unica tessera 3-5 (con i medi fusi o eliminati) alla fine avremo una unica maxi tessera 4…5
Mi rifaccio vivo dopo un certo periodo di assenza.
Suggerisco di usare un procedura ricorsiva che segue l’idea della maxitessera a tavola fatta dalla concatenazione di tutte le tessere messe a tavola questa funzione ha tre parametri:
il numero sul lato sinistro della tessera
il numero sul lato destro della tessera
di quante tessere è composta
Dato il numero esiguo di tessere non ho usato la memoizzazione.
Se aggiungo una tessera a sin prima di procedere aggiorno il numero a sin (il primo parametro etc…)
e così per l’altro lato.
Ci sono quattro casi da gestire ogni volta.
Il tutto ripetuto per tutte le tessere (ogni volta iniziando con una tessera diversa).
Posso suggerirti qualcosa anche sulle missioni di Topolino, che è più semplice.