vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Fülleimer Funktion (Backtracking -> StackOverFlow) 
Autor: viperbone
Datum: 16.08.09 20:52

Hallo zusammen

ich mache einen kleinen Map-Editor dort habe ich die "Fülleimer"-Funktion (mit Backtracking, Rekursion) eingebaut. Die funktioniert auch soweit sehr gut und zuverlässig.

Ich habe aber das Problem, dass wenn ich eine gewisse Kartengrösse (ab 90x90 Felder) die Funktion ein "StackOverFlow" Ausnahme wirft. Ich vermute ab dieser Grösse gibt es zuviele Rekursionen.

Meine Frage ist jetzt, ob ich was am Code optimieren kann oder wie ich das Problem umgehen kann?

Hier der Code der Methode:
    Private Sub Eimer(ByVal PosX As Integer, ByVal PosY As Integer, ByVal _
      NewTile As Integer, ByVal ReplacingTile As Integer)
        Try
            If PosX >= 0 And PosX <= _MapX And PosY >= 0 And PosY <= _MapY Then
 
                If _MapLevel1(PosX, PosY) = ReplacingTile Then ' aktuelles Tile 
                ' ersetzen
                    _MapLevel1(PosX, PosY) = NewTile
                End If
 
                If PosX + 1 <= _MapX Then
                    If _MapLevel1(PosX + 1, PosY) = ReplacingTile Then ' nach 
                    ' rechts weiter
                        _MapLevel1(PosX + 1, PosY) = NewTile
                        Eimer(PosX + 1, PosY, NewTile, ReplacingTile)
                    End If
                End If
                If PosY - 1 >= 0 Then
                    If _MapLevel1(PosX, PosY - 1) = ReplacingTile Then ' oben
                        _MapLevel1(PosX, PosY - 1) = NewTile
                        Eimer(PosX, PosY - 1, NewTile, ReplacingTile)
                    End If
                End If
                If PosX - 1 >= 0 Then
                    If _MapLevel1(PosX - 1, PosY) = ReplacingTile Then ' links
                        _MapLevel1(PosX - 1, PosY) = NewTile
                        Eimer(PosX - 1, PosY, NewTile, ReplacingTile)
                    End If
                End If
                If PosY + 1 <= _MapY Then
                    If _MapLevel1(PosX, PosY + 1) = ReplacingTile Then ' unten
                        _MapLevel1(PosX, PosY + 1) = NewTile
                        Eimer(PosX, PosY + 1, NewTile, ReplacingTile)
                    End If
                End If
 
            End If
        Catch ex As Exception
 
        End Try
    End Sub

fg viperbone

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Fülleimer Funktion (Backtracking -> StackOverFlow)1.617viperbone16.08.09 20:52
Re: Fülleimer Funktion (Backtracking -> StackOverFlow)1.113ModeratorRalf Ehlert16.08.09 21:13
Re: Fülleimer Funktion (Backtracking -> StackOverFlow)1.066GPM17.08.09 11:14
Re: Fülleimer Funktion (Backtracking -> StackOverFlow)982viperbone17.08.09 20:19
Re: Fülleimer Funktion (Backtracking -> StackOverFlow)903viperbone18.08.09 20:37
Re: Fülleimer Funktion (Backtracking -> StackOverFlow)1.003GPM18.08.09 21:51

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel