SUDOKU
Salve ragazzi . Dovrei fare un compito : creare un programma che una volta inserite le dimensioni del campo del sudoku , lo generi per poi giocarci . Ho girato TUTTO internet..purtroppo gli algoritmi trovati sono molto complessi ( frequento il primo anno di informatica ) . L'idea sarebbe riempire la matrice in modo corretto e poi svuotare le caselle ..ma non so proprio come muovermi
Risposte
La matrice deve essere 9x9. E' inutile [Dimensione]
I numeri che hai messo nella matrice, sono a casaccio. Non va bene cosi'.
Ogni qualvolta generi un numero casuale, devi verificarlo se va bene o meno.
Non controlli nemmeno se la cella è già piena o meno.
Devi rivedere un bel po di cose.
I numeri che hai messo nella matrice, sono a casaccio. Non va bene cosi'.
Ogni qualvolta generi un numero casuale, devi verificarlo se va bene o meno.
Non controlli nemmeno se la cella è già piena o meno.
Devi rivedere un bel po di cose.
essi , ho detto appunto che mi riempie soltanto la matrice con dei numeri casuali senza rispettare le regole . Inoltre la variabile DIMENSIONE l'ho messa perchè il programma non mi deve generare solo sudoku 9x9 ...ma anche diverse dimensioni
ho provato così ...ma ogni volta che printo la matrice me la visualizza tutta a zero :
for(i=0; i
for (j=0; j[j]= 0;
}/* FINE INIZIALIZZAZIONE A 0 */
for(n=0; n< numeriDaMettere; n++) {/* INSERIMENTO NUMERI */
boolean flag = TRUE;
while(flag) {
i = rand() % (dimensione - 1 );
j = rand() % (dimensione - 1 );
numero=rand() % dimensione + 1 ;
// numero++;
if(esiste( i , j ))
if( controlloRigheColonne( numero,i , j))
// if( controlloSottoMatrice(.....)) {
{
sudoku[j] = numero;
flag = FALSE;
}
}
}
boolean esiste( int riga , int colonna)
{
if ( sudoku[riga][colonna] == 0 )
return TRUE;
}
boolean controlloRigheColonne( int valore , int riga , int colonna)
{
int i;
// ciclo che controlla se num è presente nella riga r o nella colonna c
for(i = 0; i < dimensione ; i++)
if((valore != sudoku[riga])||(valore != sudoku[colonna]))
return TRUE ;
}
for(i=0; i
}/* FINE INIZIALIZZAZIONE A 0 */
for(n=0; n< numeriDaMettere; n++) {/* INSERIMENTO NUMERI */
boolean flag = TRUE;
while(flag) {
i = rand() % (dimensione - 1 );
j = rand() % (dimensione - 1 );
numero=rand() % dimensione + 1 ;
// numero++;
if(esiste( i , j ))
if( controlloRigheColonne( numero,i , j))
// if( controlloSottoMatrice(.....)) {
{
sudoku[j] = numero;
flag = FALSE;
}
}
}
boolean esiste( int riga , int colonna)
{
if ( sudoku[riga][colonna] == 0 )
return TRUE;
}
boolean controlloRigheColonne( int valore , int riga , int colonna)
{
int i;
// ciclo che controlla se num è presente nella riga r o nella colonna c
for(i = 0; i < dimensione ; i++)
if((valore != sudoku[riga])||(valore != sudoku[colonna]))
return TRUE ;
}
i = rand() % (dimensione - 1 ); j = rand() % (dimensione - 1 ); numero=rand() % dimensione + 1 ;
continui ad usare "dimensione" ...
Ti consiglierei, di focalizzare la matrice 9x9, di risolvere prima questa situazione ( ... e non è facile ...)
poi semmai in seconda battuta cerchi di generalizzare
per gli indici hai usato (dimensione - 1) quindi da 0 a 8
per il numero dimensione + 1 ??? non capisco.... fino a 10 ?
Allora per la variabile "dimensione " non c'è nessun problema , dato che se non modifico le impostazioni di gioco, essa è sempre 9 . Il problema è che quando faccio partire la funzione che ho postato , e printo a video la matrice , essa è tutta azzerata..cioè l'assegnamento sudoku[j] = numero è come se non fungesse
dimensione = 9
è dichiarata globalmente . Se volessi modificarla nel mio menù di gioco posso farlo .
Per quanto riguarda numero = rand()% dimensione + 1 , vuole dire " pesca un numero random da 9 a 1 .
è dichiarata globalmente . Se volessi modificarla nel mio menù di gioco posso farlo .
Per quanto riguarda numero = rand()% dimensione + 1 , vuole dire " pesca un numero random da 9 a 1 .