Rekursion mit Subs?

manuche

Mitglied
Hallo!
Ich probiere grade ein Sudoku rekursiv zu lösen... Da ich mit der Sprache LJ4 arbeite kann ich leider keine Funktionen mit Rückgabewert benutzen. Weil LJ4 stark der Syntax von VB gleicht, dachte ich mir dass ich hier die Frage stelle!
Kann ich auch mit Subs ein rekursives Backtrackingverfahren erstellen?

Der Code sieht bis jetzt wie folgt aus:

Code:
Sub CC_SudokuBT(
    ByVal VtUsed     As tHandle, 
    ByVal nField     As tShort   = 0, 
    ByVal bRekursion As tBoolean = True)

  Dim strActCol As tString
  Dim strAct As tString
  Dim strRandom As tString

  Dim bReturn As tBoolean
  
  Dim nZeile As tShort
  Dim nSpalte As tShort
  Dim nZaehler As tShort

  If (bRekursion) Then
    If (CompareNum (nField, 81) = CompareEqual) Then CC_SudokuBT (VtUsed, nField + 1, False)
    nZeile = (nField Mod 9) + 1
    nSpalte = (nField Div 9) + 1
    strActCol = "Zelle(" & Str (nSpalte) & ")"
    strAct = VtGetStr (VtUsed, strActCol, nZeile)
    If (Len (strAct) > 1) Then
      Do
        strRandom = RightStr (Now (False, True), 1)
      Loop While (CompareStr (strRandom, "0") = CompareEqual)
      VtSetStr (VtUsed, strActCol, strRandom, nZeile)
      If (Not CC_CheckBlock (strRandom, strActCol, nZeile, "VtWorkSudoku") And Not CC_CheckRow (strRandom, strActCol, nZeile, "VtWorkSudoku") And Not CC_CheckCol (strRandom, strActCol, nZeile, "VtWorkSudoku")) Then
        CC_SudokuBT (VtUsed, nField + 1, True)
      Else
        VtSetStr (VtUsed, strActCol, "123456789", nZeile)
      End If  
    Else
      CC_SudokuBT (VtUsed, nField + 1, True)
    End If
    CC_SudokuBT (VtUsed, nField, False)
  End If

End Sub // CC_SudokuBT

VtUsed ist hierbei die Tabelle auf der gearbeitet wird...
Ich hoffe dass ihr durch den Code steigen könnt!
Danke schonmal für Mühen
Gruß manuche
 
Zuletzt bearbeitet:
Zurück