Prima di tutto mi dispiace per il mio inglese.Backtracking in Erlang
Mi piacerebbe utilizzare un algoritmo di backtracking in Erlang. Servirebbe come ipotesi per risolvere sudoku parzialmente riempiti. Un sudoku 9x9 è memorizzato come una lista di 81 elementi, in cui ogni elemento memorizza il numero possibile che può entrare in quella cella.
Per un sudoku 4x4 la mia soluzione iniziale è la seguente: [[1], [3], [2], [4], [4], [2], [3], [1], [ 2,3], [4], [1], [2,3], [2,3], [1], [4], [2,3]]
Questo sudoku ha 2 soluzioni. Devo scrivere entrambi. Dopo che la soluzione iniziale è stata raggiunta, ho bisogno di implementare un algoritmo di backtracking, ma non so come farlo.
Il mio pensiero è di scrivere gli elementi fissi in una nuova lista chiamata lista fissa che cambierà le celle a più soluzioni in [].
Per l'esempio sopra menzionato la lista fissa si presenta così: [[1], [3], [2], [4], [4], [2], [3], [1], [ ], [4], [1], [], [], [1], [4], []]
Da qui ho un "campione", cerco la lunghezza più bassa nella solutionlist che non è uguale a 1, e provo il primo numero possibile di questa cella e lo metto in quella lista fissa. Qui ho un algoritmo per aggiornare le celle e controlla se è ancora un sudoku risolvibile o meno. Altrimenti, non so come fare un passo indietro e provarne uno nuovo. Conosco lo pseudo codice e posso usarlo per le lingue imperative ma non per l'erlang. (prolog ha effettivamente implementato l'algoritmo di backtrack, ma non l'ha fatto)
Qualche idea?
Sei ancora interessato a questo, ho lavorato un po 'con questo ora e posso aiutarti se lo desideri. Puoi usare il mio ID qui come indirizzo mail su gmail. – rvirding