Traveling Salesman Problem [Arrays]

johannes2308

Mitglied
Hallo,
ich muss gerade im Studium ein Traveling Salesman Problem programmieren. Dabei war die erste Aufgabe eine Entfernungstabelle für 10 verschiedenen Städten zu machen, die mit Zufallswerten gefüllt werden soll. Das habe ich geschafft, aber nun mein Problem:
Die nächst Aufgabe laute: "
Nun schreiben Sie eine Funktion, welche für eine beliebige Rundreise, die in einem int Array gespeichert ist (z.B. 5,7,2,4,1,3,6,8,9,0 heißt Stadt 5 nach Stadt 7 nach Stadt 2 nach Stadt 4 nach Stadt 5 ...) die Länge der Rundreise zurückgibt."
Dabei bin ich gerade komplett verloren obwohl wir sogar einen kleinen Ansatzpunkt erhalten haben, ich bin jedoch trotzdem gerade sehr gefangen hierbei.
Würde mich sehr freuen, wenn mir jemand helfen könnte!
Schonmal Dankeschön im Voraus! 😉
Hier erstmal der jetzige Code + der Ansatzpunkt für das weitere.

[CODE lang="java" title="Traveling Salesman Problem" highlight="26-36"]public class TravellingSalesman {

public static void main(String[] args) {

int tab[][] = new int[10][10]; // size 10 two-dimensional array

for (int i = 0; i < 10; i++) // creates random numbers for a 10x10 chart
{
for (int j = 0; j < 10; j++)
{
tab[j] = (int)(Math.random()*199); // every position in the array gets a random number between 0-199
tab[j] = tab[j]; // makes sure that it is reversed the same
tab = 0; // if its the same town there is no distance
}
}

for (int i = 0; i < 10; i++) // puts the random numbers in a visual chart
{
for (int j = 0; j < 10; j++)
{
System.out.print(tab[j] + " ");
}
System.out.println();
}

// Ansatzpunkt für die weitere Aufgabe

/* int tour[] = {5,7,2,4,1,3,6,8,9,0};

int dist = 0;

for ()
{
dist += distance(tour, tour[i+1]);
}
*/[/CODE]
 
Du hast doch schon alles dastehen, wo liegt das Problem?!? i läuft von 0 bis tour.length-2.
Naja also ich versteh nicht ganz woher das distance(tour[]...) kommt,(also primär das distance) und mir zeigt es wenn ich es laufen lasse an, dass "Index 10 out of bounds for length 10", aber nur wenn ich des untere ab 26 miteinbeziehe.
 
Zuletzt bearbeitet:
Das distance ist eine Methode, die Du entweder bekommen hast oder selbst schreiben sollst. Und was die IndexOutOfBoundsException betrifft: wenn Du dem Stacktrace nach unten folgst, wirst Du die Stelle finden, an der die Exception in Deinem Code aufgetreten ist.
 
Das distance ist eine Methode, die Du entweder bekommen hast oder selbst schreiben sollst. Und was die IndexOutOfBoundsException betrifft: wenn Du dem Stacktrace nach unten folgst, wirst Du die Stelle finden, an der die Exception in Deinem Code aufgetreten ist.
Erstmal danke, dass du mir hilfst. Zu dieser Distance Methode ist nichts vorgegeben und ich weiß jetzt auch nicht was ich darein schreiben muss.
Bin mir auch nicht sicher was du mit "Stacktrace" meinst. Sorry bin mit den Begriffen teilweise noch nicht wirklich vertraut.
 
Nun schreiben Sie eine Funktion, welche für eine beliebige Rundreise, die in einem int Array gespeichert ist (z.B. 5,7,2,4,1,3,6,8,9,0 heißt Stadt 5 nach Stadt 7 nach Stadt 2 nach Stadt 4 nach Stadt 5 ...) die Länge der Rundreise zurückgibt."
Schreibe eine Funktion, die die Distanzen in einer Rundreise (int []) aufsummiert. Die Funktion soll diese Summe dann zurückgeben.
 
[CODE lang="java" title="Distance" highlight="1"]int distance( int[][] tab, int[] route ){
int distance = 0;
...
return distance;
}[/CODE]
 
Du hast doch eine "Abstandstabelle" in tab definiert.
Die Methode distance muss docnh nur die Werte aus dieser Abstandstabelle zurückliefern.
Und der "Handlungsreisende" ("traveling salsemen") möchte am Abend möglicherweise wieder zu Hause sein (wenn das in des Aufgabenstellung gefordert ist - aber die Bezeichnung "Rundreise" suggeriert das). Dann musst du den Abstand vom letzten Punkt der Reise zum ersten Punkt der Reise noch addieren.
 
Du hast doch eine "Abstandstabelle" in tab definiert.
Die Methode distance muss docnh nur die Werte aus dieser Abstandstabelle zurückliefern.
Und der "Handlungsreisende" ("traveling salsemen") möchte am Abend möglicherweise wieder zu Hause sein (wenn das in des Aufgabenstellung gefordert ist - aber die Bezeichnung "Rundreise" suggeriert das). Dann musst du den Abstand vom letzten Punkt der Reise zum ersten Punkt der Reise noch addieren.
Ich muss doch aber die werte bei tab also i und j als route und route[] benutzen wenn ich mir bei Route[] eine random 10er abfolge geben lasse und wenn ich das mit @Blender3D hinweis versuche habe ich dabei Übertragungsprobleme zwischen den Methoden. Ich soll ja die Komponente, welche mir eine Zufallsrundreise wiedergibt auch als eigene Funktion schreiben und das bringt mir dann weitere Probleme :/
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben