title image


Smiley Re: Hat sich doch noch Einer gefunden
Ist die Umsetzung nach bestem Wissen läuft aber nicht. Schon im C-Source kommt immer "<9" vor. Der max. Index kann aber nur 8 sein weil 0 halt mitzählt.









Sub myMain()

    start = Array(Array(2, 4, 0, 0, 9, 0, 0, 0, 0), _

    Array(5, 1, 0, 0, 0, 3, 4, 0, 9), _

    Array(0, 0, 0, 0, 6, 4, 2, 8, 1), _

    Array(0, 0, 0, 3, 0, 8, 1, 0, 0), _

    Array(1, 0, 7, 0, 0, 0, 0, 5, 3), _

    Array(0, 3, 5, 6, 0, 0, 0, 0, 4), _

    Array(0, 5, 1, 7, 0, 0, 0, 0, 2), _

    Array(0, 0, 3, 0, 2, 0, 0, 0, 0), _

    Array(0, 2, 4, 0, 1, 9, 3, 0, 0))

'    MsgBox start(7)(2)

'    Exit Sub

    Dim x As Integer, y As Integer



    If nextone(start, 0, 0) Then

        x = 0

        While (x < 9)

            x = x + 1

            y = 0

            While y < 9

                y = y + 1

                MsgBox start(x)(y)

            Wend

        Wend

   Else

        MsgBox "Dieses Rätsel ist nicht lösbar!"

    End If

End Sub

Function nextone(feld As Variant, x As Integer, y As Integer) As Boolean

    If (y = 9) Then

        y = 0

        x = x + 1

    End If

    If (x = 9) Then nextone = True



   If (feld(x)(y) > 0) Then

        If Not isfine(feld, x, y) Then nextone = False

        nextone = nextone(feld, x, y + 1)

   Else

continue:

    While feld(x)(y) <= 9

        feld(x)(y) = feld(x)(y) + 1

       If Not isfine(feld, x, y) Then GoTo continue

       If nextone(feld, x, y + 1) Then nextone = True

   Wend

End If

   feld(x)(y) = 0

   nextone = False

End Function



Function isfine(feld As Variant, x As Integer, y As Integer) As Boolean

'   // doppelte Zahl in Zeile oder Spalte?

   Dim yi As Integer, xi As Integer

   While yi < 9

        yi = yi + 1

        If (yi <> y And feld(x)(yi) = feld(x)(y)) Then isfine = False

   Wend

   xi = 0

   While xi < 9

        xi = xi + 1

       If (xi <> x And feld(xi)(y) = feld(x)(y)) Then isfine = False

   Wend

'   // Neuner-Kästchen-Test

Dim x1  As Integer, y1 As Integer

   x1 = (x / 3) * 3

   y1 = (y / 3) * 3

   Dim xk  As Integer, yk As Integer

   xk = x1

   While xk < x1 + 3

        xk = xk + 1

        yk = y1

        While yk < y1 + 3

           yk = yk + 1

           If ((xk <> x Or yk <> y) And feld(xk)(yk) = feld(x)(y)) Then isfine = False

        Wend

   Wend

   isfine = True

End Function





Code eingefügt mit Syntaxhighlighter 4.0




Gruss Uwe
Wenn weise Maenner nicht irrten, müssten die Narren verzweifeln. (Goethe)



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: