PDA

Visualizza la versione completa : [C++] Cruci-puzzle implementato con matrice e ricerca incastro


elettrika33
24-02-2011, 14:18
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!



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! :D

Loading