Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

Titolo: Programma risolutore Sudoku: metodo ricorsivo

Categoria: Codice Ultimo Aggiornamento: 19/01/06


Per dimostrare l'equivalenza tra procedure iterative e procedure ricorsive, pubblichiamo due metodi per risolvere uno schema Sudoku 9x9x9.
Ecco la soluzione del Sudoku ricorsiva:

`Solver
$prossimo:=$1
If ($prossimo>0)
        $row:=($prossimo\9)+(1*Num(Mod($prossimo;9)>0))
        $column:=$prossimo-(($row-1)*9)
        $0:=False
        For ($i;1;9)
           arrValori{$row}{$column}:=$i
           If (CheckRules ($row;$column))
           $0:=Solver (GetNext )
           End if
           If ($0)
           $i:=12
           End if
        End for
        If ($0=False)
           arrValori{$row}{$column}:=0
        End if
Else
        $0:=True
End if


`CheckRules
$0:=True
$row:=$1
$column:=$2
$valore:=arrValori{$row}{$column}
For ($i;1;9)
        If ((($i#$row) & (arrValori{$i}{$column}=$valore)) | (($i#$column) & (arrValori{$row}{$i}=$valore)))
           $0:=False
           $i:=12
        End if
End for
If ($0)
        $firstcol:=($column-1\3)*3
        $firstrow:=($row-1\3)*3
        For ($i;1;3)
           For ($j;1;3)
           $checkRow:=$firstrow+$i
           $checkCol:=$firstcol+$j
           If ((Not(($checkRow=$row) & ($checkCol=$column))) & (arrValori{$checkRow}{$checkCol}=$valore))
           $0:=False
           $i:=12
           $j:=12
           End if
           End for
        End for
End if


`GetNext
ARRAY LONGINT($arrPosizione;0)
ARRAY LONGINT($arrQuanti;0)
For ($i;1;9)
        For ($j;1;9)
           If ((arrFissi{$i}{$j}=False) & (arrValori{$i}{$j}=0))
           INSERT ELEMENT($arrPosizione;Size of array($arrPosizione)+1)
           INSERT ELEMENT($arrQuanti;Size of array($arrQuanti)+1)
           $arrPosizione{Size of array($arrPosizione)}:=(($i-1)*9)+$j
           For ($valore;1;9)
           arrValori{$i}{$j}:=$valore
           If (CheckRules ($i;$j))
           $arrQuanti{Size of array($arrQuanti)}:=$arrQuanti{Size of array($arrQuanti)}+1
           End if
           End for
           arrValori{$i}{$j}:=0
           End if
        End for
End for
MULTI SORT ARRAY($arrQuanti;>;$arrPosizione;>)
If (Size of array($arrQuanti)>0)
        $0:=$arrPosizione{1}
Else
        $0:=0
End if




Inviato da: PierPaolo Sichera Visite: 13792

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
301 utenti registrati

Pagina servita il 19/03/24 alle 12:26:11 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad