Code archives/Algorithms/Sudoku-Solver

This code has been declared by its author to be Public Domain code.

Download source code

Sudoku-Solver by Mr. Bean2006
in German
Graphics 800,600,16,2
;---------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------ARRAYS--VARIABLES------------------------------------------------------------------;
;---------------------------------------------------------------------------------------------------------------------------------;
Dim Array_all(9,9,2)

;-------------------------------------
For y=1 To 9
 For x=1 To 9
  Read Array_all(x,y,2)
 Next
Next

;--------------------------------------

Dim Array_x  (9,9)

Dim Array_y  (9,9)

Dim Array_b  (9,9)

Global Var_F,Var_read_In,Eing$="nicht"
Global Var_F_x,Var_F_y,Var_F_b
;---------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------MAIN-------------------------------------------------------------------------------;
;---------------------------------------------------------------------------------------------------------------------------------;
.label_anf
Print "Per Input einlesen      [1]"
Print "Per .txt-Datei einlesen [2]"
Print "Reihen-Array ausgeben   [3]"
Print "Spalten-Array ausgeben  [4]"
Print "Kästchen-Array ausgeben [5]"
Print "Sudoku ausgeben         [6]"
Print "Sudoku lösen            [7]
Print "Beenden                 [8]"
Print
Print "Sudoku "+Eing+" vorhanden !"
Print
temp=WaitKey()

If temp =49 Then Print "Per Input einlesen !":func_read_in_input():func_into_arrays()
If temp =50 Then Print "Per .txt-Datei einlesen !":func_read_in_datei():func_into_arrays()
If temp =51 Then Print "Reihen-Array ausgeben !":func_show_Array_x()
If temp =52 Then Print "Spalten-Array ausgeben !":func_show_Array_y()
If temp =53 Then Print "Kästchen-Array ausgeben !":func_show_Array_b()
If temp =54 Then Print "Sudoku ausgeben !":func_show_Array_all()
If temp =55 Then Print "Sudoku lösen !":func_solve_sudoku()
If temp =56 Then End



Print "-------------------------------------------------------------------------------------"
Print "-------------------------------------------------------------------------------------"
Print "-------------------------------------------------------------------------------------"
Goto label_anf
WaitKey
End
;----------------------------------------------------------------------------------------------------------------------------------;
;-----------------------------------------------FUNCTIONS--------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_read_in_input()
Print
For y=1 To 9
 For x=1 To 9
  
.label_false

  temp=Input("Wert des Feldes "+x+"/"+y+" :  ")

    If temp<0 Or temp>9 Goto label_false   

  Array_all(x,y,1)=temp
  Var_read_in=True
 Next
Next 
Eing=""
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_read_in_datei()
Print
dat$=Input("Welche Datei ?  ")
a=ReadFile(dat$)

If a=0 Then
 Print "Datei existiert nicht !"
 Goto label_func2_end
EndIf 

For y=1 To 9
 l$=ReadLine(a)
  For x=1 To 9
   temp$=Mid$(l$,x,1)
   temp=Int(temp$)
   If temp<0 Or temp>9 Then
    Print "Fehler: Ziffer <0 oder >9 !"
    Goto label_func2_end
   EndIf
   Array_all(x,y,1)=temp
   Var_read_in=True
  Next
 Next
Print 
Print "Datei eingelesen"
Print
Eing=""
.label_func2_end
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_into_arrays()
;---Arrayinhalte-löschen--

;-Array_x()-
For y=1 To 9
 For z=1 To 9
  Array_x(y,z)=False
 Next
Next

;-Array_y()-
For x=1 To 9
 For z=1 To 9
  Array_y(x,z)=False
 Next
Next

;-Array_b()-
For b=1 To 9
 For z=1 To 9
  Array_b(b,z)=False
 Next
Next





;---Array_x()-------------
For y=1 To 9
 For x=1 To 9


  If Array_x(y,Array_all(x,y,1))<>True And Array_all(x,y,1)<>0 Then
   Array_x(y,Array_all(x,y,1))=True 
  ElseIf Array_x(y,Array_all(x,y,1))=True And Array_all(x,y,1) Then 
   Print "Fehler in Reihe "+y+" durch die Zahl "+Array_all(x,y,1)+" !"
   Var_F=Var_F+1
  EndIf 


 Next
Next





;---Array_y()-------------
For x=1 To 9
 For y=1 To 9


  If Array_y(x,Array_all(x,y,1))<>True And Array_all(x,y,1)<>0 Then
   Array_y(x,Array_all(x,y,1))=True 
  ElseIf Array_y(x,Array_all(x,y,1))=True And Array_all(x,y,1) Then 
   Print "Fehler in Spalte "+x+" durch die Zahl "+Array_all(x,y,1)+" !"
   Var_F=Var_F+1
  EndIf 


 Next
Next




;---Array_b()-------------

For y=1 To 9
 For x=1 To 9
  b=Array_All(x,y,2)
  If Array_b(b,Array_all(x,y,1))<>True And Array_all(x,y,1)<>False Then
   Array_b(b,Array_all(x,y,1))=True 
  ElseIf Array_b(b,Array_all(x,y,1))=True And Array_all(x,y,1)<>0 Then 
   Print "Fehler im Kästchen "+b+" durch die Zahl "+Array_all(x,y,1)+" !"
   Var_F=Var_F+1
  EndIf 

 Next
Next

End Function 
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_show_Array_x()
For y=1 To 9
 Print
 For z=1 To 9
  Write y+"/"+z+": "+Array_x(y,z)+" | " 
 Next
Next
Print
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_show_Array_y()
For x=1 To 9
 Print
 For z=1 To 9
  Write x+"/"+z+": "+Array_y(x,z)+" | "
 Next
Next
Print
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_show_Array_b() 
For k=1 To 9
 Print
 For z=1 To 9
  Write k+"/"+z+": "+Array_b(k,z)+" | "
 Next
Next
Print
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_show_array_all()
For y=1 To 9
 Print
 If y=4 Or y=7 Then
  Print " +++ +++ +++ +++ +++ +++ +++ +++ +++ "
 Else
  Print " --- --- --- --- --- --- --- --- --- "
 EndIf
 Write "| "
 For x=1 To 9

 If Array_all(x,y,1) Then
  If x=3 Or x=6 Then 
   Write Array_all(x,y,1)+" + "
  Else 
   Write Array_all(x,y,1)+" | "
  EndIf
 Else 
  If x<>3 And x<>6 Then 
   Write "  | "
  Else
   Write "  + "
  EndIf
 EndIf

 Next
Next
Print
Print " --- --- --- --- --- --- --- --- --- "

End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_solve_sudoku()
.anf_func8
For y=1 To 9
 For x=1 To 9
  If Array_All(x,y,1)=0 Then
   m=func_count_m(x,y)
   If m<>1 Then 
    m=0
   Else  
    m=0
    For Z=1 To 9
     If Array_x(y,z)=False And Array_y(x,z)=False And Array_b(Array_All(x,y,2),z)= False Then
      Exit
     EndIf
    Next
    Array_All(x,y,1)=Z
    func_into_arrays()
    Goto anf_func8
   EndIf
  EndIf 
 Next
Next
Print
Print "Gelöst !"
Print
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Function func_Count_m(x,y)
m=0
For Z=1 To 9
 If Array_x(y,z)=False And Array_y(x,z)=False And Array_b(Array_All(x,y,2),z)= False Then
  m=m+1
 EndIf
Next
Return m
End Function
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
;----------------------------------------------------------------------------------------------------------------------------------;
Data 1,1,1,2,2,2,3,3,3
Data 1,1,1,2,2,2,3,3,3
Data 1,1,1,2,2,2,3,3,3
Data 4,4,4,5,5,5,6,6,6
Data 4,4,4,5,5,5,6,6,6
Data 4,4,4,5,5,5,6,6,6
Data 7,7,7,8,8,8,9,9,9
Data 7,7,7,8,8,8,9,9,9
Data 7,7,7,8,8,8,9,9,9

Comments

None.

Code Archives Forum