View Full Version : [java]Risolvere il Sudoku
Salve a tutti,
devo creare un programma che risolva il sudoku,soltanto che non so proprio da che parte cominciare;
qualcuno sa darmi qualche dritta,qualke link,a me interesserebbe avere un programma simile già bello e pronto per capire come funziona ed essere in grado di riprodurlo.
Questo è un progetto d'esame e per molti programamtori potrà sembrare una banalità ma io che sono uno studente del primo anno sono in difficoltà e chiedo il vostro aiuto,vi prego quindi di aiutarmi a costruirlo,ciao,grazie mille. :)
se ne era già parlato sul forum, prova a fare una bella ricerca :read:
Gandalf_BD
03-01-2006, 11:29
se la logica non mi inganna, dovrebbe essere simile, come tipologia, al problema delle 8 regine.... solo più difficile :D :D :D
è giusto o sbaglio?
rispondo ad entrambi:
la ricerca l'ho fatta,ed ho trovato un post nel quale si chiedeva la stessa cosa,peccato ke il linguaggio era diverso,infatti era C++.
Gandalf...non so cosa siano le 8 regine.. :D ..cmq di sicuro è più difficile xkè qua devo dichiarare un casino di roba..
vi prego help me..
raga vi prego datemi na mano xkè io sono nella merda..
Aiutino semplice.
SUDOKU formato CHIUSO: (ad ogni istante almeno 1 casella è esattametnte definita)
Creati una classe "cella": questa contiene un array di 9 valori.
Creati la matrice di celle per il tuo sudoku. Creati dell'insiemi di celle che rappresentino le righe, le colonne, i sotto quadrati.
Ovviamente ogni istanza di cella apparterrà sia ad una colonna, sia ad una riga, sia ad un quadrato.
Bene, ora definisci il valore per n celle (già fare questo, ovvero scegliere quale valore dare a quali celle e a quante, richiederebbe un programmino complicato, quindi ti consiglio di fare i test prendendoli da giornali o siti).
A questo punto parti ed esplori tutte le celle con un valore. Per ogni cella, togli il suo valore dall'array presenti nelle celle della stessa riga, colonna e quadarato. Quando rimane 1 valore solo nella array, allora questo è il valore della cella e diventa una cella con valore definito.
Iterando ----> SOLUZIONE !!!
(Fatto funzionate in C# in 2 ore)
SUDOKU formato APERTO: (ad ogni istante non è detto ci sia 1 casella esattametnte definita)
Non l'ho provato a fare, ma si dovrebbe gestire l'albero delle decisioni, ovvero partendo dalla soluzione precedente, si vanno a esplorare le celle non ancora risolte con solo 2 valori. se ne sceglie uno e ci si ricoda (memorizzandolo) che li c'è un bivio...via così finche si arriva infondo, se si è risolot OK, altrimenti si torna su e si riprova cambiando scelta.
Qui si entra nell'intelligenza artificiale e ai mille metodi di fare alberi e di visitarli.
Spero di essere stato utile.
CIAO
P.S.: guarda che dal codice in C++ potresti trovare un sacco di belle cose...non è poi così incomprensibile ;)
ok,grazie mille,almeno ora so dove cominciare..
comunque un esempio da cui attingere mi farebbe proprio comodo..qualcuno sa dove posso trovarlo?
Gandalf_BD
04-01-2006, 21:28
...non so cosa siano le 8 regine...
beh... è un problema di logica che si usa per insegnare ad usare la ricorsione... a me lo hanno fatto vedere in C, ma penso che sia tranquillamente risolvibile anche in Java...
cmq lo scopo del programma è quello di riuscire a mettere su una scacchiera 8x8, 8 regine in modo tale che nessuna possa mangiare nessun altra...
cmq hai ragione... il tuo problema è più difficile... però se vuoi prima "farti le ossa"... penso che la ricorsione vada usata al 99%... però Java lo conosco poco :)
buona fortuna! :D
...okkei...grazie x il "buona fortuna" :D
mercury841
05-01-2006, 18:29
Secondo me il metodo più semplice per risolvere questo problema è quello della programmazione dinamica, però non so se la conosci, visto che sei al primo anno,
ciao
Secondo me il metodo più semplice per risolvere questo problema è quello della programmazione dinamica, però non so se la conosci, visto che sei al primo anno,
ciao
no..non so di cosa tu stia parlando,cmq se sai come darmi una mano,anke magari passando per vie meno brevi,te ne sarei grato.. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.