durch eine Matrix wandeln
-
Servus Liebe Gemeinde,
Und wieder einmal stehe ich auf dem Schlauch und hoffe das ihr hier mir weiterhelfen könnt. Folgendes Problem:
Ich habe eine Matrix gegeben.
int bla[100][100]In dieser Matrix stehen Zahlen drin (is irgendwie klar, aber ich wills noch mal lieber mit hinschreiben.
)Gebe ich nun einen Punkt (x,y) in der Matrix an soll mir eine Funktion alle umliegenden Punkte geben die einen grösseren Wert haben als die gewählte Stelle. Das das ganze muss ja nun quasi rekursiv vonstatten gehen muss ist mir klar. Mir fehlt nur wieder mal der Ansatz wie ich das am besten bewerkstelligen kann.
Mit meinem tollen **if(...)**Konstrukt komm ich da irgendwie net so richtig ans Ziel.Danke schon mal im voraus für eure Hilfestellungen.
MfG der_ric
-
Hallo
Rekursion ist klar unnötig...
Wenn du mit "umliegenden Punkte" die 8 anliegenden Felder meinst sieht das zum Beispiel so aus :int x = ...; int y = ...; if (Matrix[x -1][y -1] > Matrix[x][y]) // Punkt oben links ist größer if (Matrix[x][y -1] > Matrix[x][y]) // Punkt oben mitte ist größer if (Matrix[x +1][y -1] > Matrix[x][y]) // Punkt oben rechts ist größer ... if (Matrix[x +1][y +1] > Matrix[x][y]) // Punkt unten rechts ist größerbis bald
akari
-
naja, ich würde schon sagen rekursiv, denn es soll ja solange fortgeführt werden bis die ringsherum höchsten Werte gefunden sind, egal wie weit die entfernt sind (5 oder 40 Felder) Ein gutes Beispiel ist ein Tal mit ringsrum Bergen.Man startet im Tal und will solange das Gebiet markieren wie es ansteigend ist. Ist man an den Berggipfel angekommen hört man auf. Nur wie mach ich das halt am geschicktesten???
MfG der_ric
-
Kannst Du Dein Problem mal exakt beschreiben? Jetzt klingt es so, als ob Du nur das Maximum aller Elemente finden willst. Oder nur in den Richtungen Nord,Süd,Ost,West?
-
witte_ schrieb:
Kannst Du Dein Problem mal exakt beschreiben? Jetzt klingt es so, als ob Du nur das Maximum aller Elemente finden willst. Oder nur in den Richtungen Nord,Süd,Ost,West?
also, wie gesagt. Man hat die Matrix die z.B. so aussieht:
0,0,0,0,3,0 0,1,1,1,3,0 0,1,0,1,3,0 0,1,1,1,3,0 0,0,0,0,3,0 0,0,0,0,3,0nachdem ich nun durch die Matrix gegengen bin will ich im Endeffekt folgende Matrix übrighaben.
-,-,-,-,T,- -,T,T,T,T,- -,T,+,T,T,- -,T,T,T,T,- -,-,-,-,T,- -,-,-,-,T,-+ = der Punkt wo begonnen wurde
T = Treffer also Wert ist grösser als mein Vorgänger.
- = Fehler also mein Wert ist kleiner als mein VorgängerIc weiss net wie eich es sonst besser beschreiben soll, aber ich denke mit dem Beispiel dürfte es eindeutig erläutert sein.

MfG der_ric
-
Hallo
Selbst bei einem weiterem Umfeld würde man das besser iterativ lösen. Denn bei rekursiven Umsetzungen hat man potentiell mit Stack-Überlauf zu rechnen.
bis bald
akari
-
Hallo
Zu deinem letzten Post :
Dann must du doch nur einfach über alle Felder iterieren, mit zwei verschachtelten For-Schleifen.bis bald
akari
-
stimmt, nach nem Kaffe und ner Kippe kams dann wie von alleine.
trotzdem danke fürs nachhelfen....MfG der_ric