Kleinste Zahl in Array finden die vorher noch errechnet werden müssen.

Dracarys

Neues Mitglied
Ich muss von 10 Städten jeweils die nächstgelegene errechnen und von dieser dann wieder die nächste, usw.
Ich habe jetzt eine for-Schleife von Stadt 0 zu den anderen 9 erstellt und den richtigen Wert erhalten, doch wie geht es das ich jetzt mit dieser Stadt weiter mache (logischerweise ohne die vorherige Stadt).1666705716725.png
 
Du bist ja jetzt schon mal so weit, dass du herausgefunden hast, dass die nächste Stadt zu 0 die Stadt 4 ist.
Wenn alle Städte Objekte einer Klasse sind und dies Stadtobjekte in einem Array, liegen, dann kannst du immer die nächste Stadt suchen (in diesem Fall die 4) dann die Ursprungsstadt aus dem Array löschen (die 0) und dann die nächste Stadt zu 4 suchen (die 0 kann es ja nicht mehr werden, da wir sie aus dem Array gelöscht haben) und so geht es weiter bis alle Städte durch sind. Das geht dann locker mit einer for -Schleife.
 
Du bist ja jetzt schon mal so weit, dass du herausgefunden hast, dass die nächste Stadt zu 0 die Stadt 4 ist.
Wenn alle Städte Objekte einer Klasse sind und dies Stadtobjekte in einem Array, liegen, dann kannst du immer die nächste Stadt suchen (in diesem Fall die 4) dann die Ursprungsstadt aus dem Array löschen (die 0) und dann die nächste Stadt zu 4 suchen (die 0 kann es ja nicht mehr werden, da wir sie aus dem Array gelöscht haben) und so geht es weiter bis alle Städte durch sind. Das geht dann locker mit einer for -Schleife.
Aber müsste ich dafür nicht die Stadt 0 manuell löschen?
 
Aber müsste ich dafür nicht die Stadt 0 manuell löschen?
Nein, du kennst ja den Ausganspunkt am Anfang z.B.: die Stadt 0 und das ist im Array der erste Eintrag und kann somit entfernt werden.
Ich weiß nicht wie bestimmt wird von welcher Stadt aus man beginnt, aber diese Nummer behälst du dir in einer Variablen und kannst sie nach dem Berechnen des nächsten Schritts automatisiert löschen.
 
Ein paar Anmerkungen zu der Aufgabe.

1) Musst Du die Koordinaten der Städte in zwei geterenten Arrays für x und y speichern oder kennst Du einfach noch keine Alterneativen? Z.B. die von JAVA mitgelieferte Klasse java.awt.Point (kannst Du mal googeln) würde Dir schon etwas Arbeit abnehmen und den Code ein klein wenig objektorientierter machen. Jede Stadt könnte dann durch einen Punkt repräsentiert werden, der intern die x- und y-KO speichert und die mitgelieferte Methode distance() berechnet auch noch mal schnell den Abstand zu einem anderen Punkt.

2) Die in Deinem Beispiel aufgeführeten Koordinaten haben stets identische x- und y-Werte, liegen somit auf einer Geraden. Das macht die Problemlösung trivial, denn es reicht nun, die Arrays der Größe nach zu sortieren und fertig ist die kürzeste Route. Ich schätze, dass das aber in der 'Realität' nicht so vorkommen wird.

3) Die Route muss gespeichert werden. Beispielsweise in Form eines Arrays, in welches nur die Indizes der/des ursprünglichen KoordinatenArrays in der ermittelten Reihenfolge abgelegt werden. Z.B. route[routenIndex] = stadtIndex (wenn stadtIndex auf die Koordinaten der nächstgelegen Stadt zeigt).

4) Der Suchalgorithmus muss ausschließen, dass Du eine Stadt zweimal durchfährst. Bedenke: Wenn Stadt A und Stadt F sich am nächsten liegen, dann liegt Stadt F auch wiederum der Stadt A am nächsten. Soll die Route deswegen wieder zu A zurückführen? Wohl nicht.

5) Wenn die Städte in der Ebene verteilt sind, wird allein die Suche nach der nächstgelegen (und noch nicht besuchten) Stadt nicht zwingend zur kürzesten Routenlänge führen. Um die kürzeste Route zu finden, müüsen tatsächlich alle möglichen Routen durchrerechnet werden.
Ausgehend von Stadt A und neun weiteren Städten wären das ca. 360 000 kombinationen (Fakultät 9).
 

Zurück
Oben