P
prha
Gast
Hey,
das Problem, welches es zu lösen gilt ist folgendes.
Gegeben ist ein vollständiger Graph mit n Knoten, und einer zufällig gewählten Kantenbewertung von 0-10.
Nun soll die kürzeste Tour(=Weg bei dem alle Knoten einmal besucht werden, und Anfangs- und Startknoten der Tour gleich sind) heraus gefunden werden. Und zwar durch eine rekursive Permutation aller Möglichkeiten.
Bis jetzt bin ich soweit gekommen:
Die Idee ist: ich teste ob es schon eine Tour ist, was übergeben wird. Wenn ja berechne ich die Länge, und vergleiche ob diese Tour die kürzeste Länge, aller bisher berechneten Touren hat. Wenn ja speichere ich die Länge und die Tour selbst.
Wenn nicht, möchte "Permutationen von Touren" erzeugen, und dann wieder "recursiveTsp" aufrufen. Wenn dies überhaupt möglich ist. Rekustion verstehe ich nämlich noch nicht 100%ig, was wohl offensichtlich ist .
Ich hoffe ihr könnt mir Denkanstöße geben, oder erklären was an meinem Gedanke falsch ist.
das Problem, welches es zu lösen gilt ist folgendes.
Gegeben ist ein vollständiger Graph mit n Knoten, und einer zufällig gewählten Kantenbewertung von 0-10.
Nun soll die kürzeste Tour(=Weg bei dem alle Knoten einmal besucht werden, und Anfangs- und Startknoten der Tour gleich sind) heraus gefunden werden. Und zwar durch eine rekursive Permutation aller Möglichkeiten.
Bis jetzt bin ich soweit gekommen:
Die Idee ist: ich teste ob es schon eine Tour ist, was übergeben wird. Wenn ja berechne ich die Länge, und vergleiche ob diese Tour die kürzeste Länge, aller bisher berechneten Touren hat. Wenn ja speichere ich die Länge und die Tour selbst.
Wenn nicht, möchte "Permutationen von Touren" erzeugen, und dann wieder "recursiveTsp" aufrufen. Wenn dies überhaupt möglich ist. Rekustion verstehe ich nämlich noch nicht 100%ig, was wohl offensichtlich ist .
Ich hoffe ihr könnt mir Denkanstöße geben, oder erklären was an meinem Gedanke falsch ist.
Code:
import java.io.*;
public class TSP{
static int n; // number of nodes
static double[][] D; // distance matrix
public static double recursiveTsp(int fixed, int[] tour){
int[] optour=new int[n+1];
double dist = Double.POSITIVE_INFINITY;
if(fixed == tour.length-1 ){ // if there aren't any nodes to visit
double opdist = tourLength(D,tour); //calculates length of tour
if (opdist<dist){ // checks if tour is shorter then every other tour
dist=opdist;//saves length of best tour
optour=tour;//saves best tour
}
}
else{ //there are nodes, which have to be visited
for (?????) {
?????????
}
}
return dist;
}
/**
* calculates the length of the tour
* @param tour nodes of the tour
* @param D distance matrix
*/
public static double tourLength(double[][] distance, int[] tour){
double dist=0;
for (int i = 0; i<tour.length-1;i++){
dist+= distance[tour[i]][tour[i+1]];
}
return dist;
}//end tourLength