Salve ragazzi, il titolo non è molto indicativo ma non sapevo proprio come intitolare il topic! Mi servirebbe un aiuto abbastanza urgente, ho un esame a breve e devo consegnare un progetto, mi sono impallato su una cosa veramente stupida, e non riesco ad andare avanti. Sto scrivendo un programma che crei un crucipuzzle (avete presente quei cruciverba dove ci sono tutte le parole incastrate una con l'altra e vanno cerchiate?! vabbè!), vi posto prima la parte di codice e poi vi spiego dove mi sono bloccato!

codice:
void creapuzzle (char **elenco, char puzzle[][20], int dimpuzzle, int numparole)
{
     int riga = -1;
     int colonna = -1;
     int direzione;
     int finita = 0;
     int j = 0;
     
     for (int i=0; i<numparole; i++)
     {
         
         while (j<strlen(*elenco))
         {
                 if (cercaincastro (elenco, puzzle, dimpuzzle, j, riga, colonna, finita))
                 {
                                   
                     direzione = provaincastro(elenco, puzzle, dimpuzzle, j, riga, colonna);
                           
                     if (direzione != 0)
                     {
                          incastra(elenco, puzzle, dimpuzzle, j, riga, colonna, direzione);
                          break;  // Dopo l'incastro interrompe subito il while per passare alla parola successiva
                     }   
                 }
                 
                 if (finita == 1)  // Se la matrice non e' ancora finita e 'cercaincastro' non torna true, potrebbero esserci altre lettere uguali
                     j++;
                 else
                 {
                 if (colonna == dimpuzzle-1)
                     colonna = -1;
                 if (colonna != dimpuzzle-1)
                     riga -= 1;
                 }
         }
         
         riga = -1;
         colonna = -1;
         finita = 0;
         j = 0;
         elenco +=1;
     }
}

bool cercaincastro (char **elenco, char puzzle[][20], int dimpuzzle, int j, int&riga, int&colonna, int&finita)
{
     for (int i = riga+1; i<dimpuzzle; i++)
     {
         for (int k = colonna+1; k<dimpuzzle; k++)
         {
             if (elenco[0][j] == puzzle[i][k])
             {
             riga = i;
             colonna = k;
             return true;
             }
         }
     }
     
     finita = 1;
     return false;
}
dunque, la funzione cercaincastro mi ritorna true se trova una lettera uguale nella matrice puzzle, dopo di che la funzione provaincastro mi restituisce un intero e lo assegna a direzione se l'incastro è possibile. Se tutto ciò avviene il break mi esce dal ciclo e mi passa alla parola successiva memorizzata in elenco. Se cercaincastro mi ritorna true e provaincastro mi restituisce 0 dovrebbe partire dalla posizione successiva della matrice puzzle e vedere se ci sono altre lettere uguali prima di passare alla j(lettera) successiva. Il problema è questo, sono da due giorni bloccato su questa stupidaggine e non riesco ad andare avanti... HELP!