Super, vielen Dank...
... es kam mir auch verdächtig einfach vor
Die Lösung hier funktioniert ganz gut, mit Queue halt (list of pair), aber gut.
way ist das Feld mit den Schrittzahlen. Die Funktion funktioniert auch als Test und gibt False zurück wenn Start und Ziel nicht verbunden sind. Höhlen haben Null, die brauche ich auch nicht.
Var list( -1 ) As Pair
Var i, x, y as integer
i = 0
list.Add New Pair( StartFieldX, StartFieldY )
Do
x = list( 0 ).x
y = list( 0 ).y
list.Remove( 0 )
i = way( x, y )
If (Weg nach Rechts möglich und frei) Then
way( x + 1, y) = i + 1
list.add New pair( x + 1, y)
End If
If (Weg nach Links möglich und frei) Then
way( x - 1, y ) = i + 1
list.add New pair( x - 1, y )
End If
If (Weg nach Unten möglich und frei) Then
way( x, y + 1 ) = i + 1
list.Add New pair( x, y + 1 )
End If
If (Weg nach Oben möglich und frei) Then
way( x, y - 1 ) = i + 1
list.Add New pair( x, y - 1 )
End If
Loop Until list.count = 0
way( StartFieldX, StartFieldY ) = 0
If way( FinishFieldX, FinishFieldY ) = 0 Then
Return False
End If
Return True
Die Lösung hier funktioniert ganz gut, mit Queue halt (list of pair), aber gut.
way ist das Feld mit den Schrittzahlen. Die Funktion funktioniert auch als Test und gibt False zurück wenn Start und Ziel nicht verbunden sind. Höhlen haben Null, die brauche ich auch nicht.
Var list( -1 ) As Pair
Var i, x, y as integer
i = 0
list.Add New Pair( StartFieldX, StartFieldY )
Do
x = list( 0 ).x
y = list( 0 ).y
list.Remove( 0 )
i = way( x, y )
If (Weg nach Rechts möglich und frei) Then
way( x + 1, y) = i + 1
list.add New pair( x + 1, y)
End If
If (Weg nach Links möglich und frei) Then
way( x - 1, y ) = i + 1
list.add New pair( x - 1, y )
End If
If (Weg nach Unten möglich und frei) Then
way( x, y + 1 ) = i + 1
list.Add New pair( x, y + 1 )
End If
If (Weg nach Oben möglich und frei) Then
way( x, y - 1 ) = i + 1
list.Add New pair( x, y - 1 )
End If
Loop Until list.count = 0
way( StartFieldX, StartFieldY ) = 0
If way( FinishFieldX, FinishFieldY ) = 0 Then
Return False
End If
Return True