Problem med returnering af variabel
Hej eksperter!Jeg har fået et problem, hvor jeg skal finde den korteste vej i mellem nogle punkter vha. Branch-around-Bound algoritmen. Algoritmen virker fint, men når jeg har fundet en vej og længde på vejen, skal jeg tjekke om den nye vej er kortere eller længere end den tidligere vej. Problemet består i at min "længde" ikke bliver sat til "newLængde", når den har fundet vejen, hvilket betyder at den kører alle løsninger igennem, og det er ikke meningen.
Håber I kan hjælpe..
Mvh Christian
Kode:
//Metoden som oprette alle punkterne og kan metoden findTour(), //det indeholder selve algoritmen.
public void path()
{
int[] path = {0};
int n = test5.costMatrix.length;
int[] remainingNodes = new int[n-1];
for (int i = 1; i < n; i++)
{
remainingNodes[i-1] = i;
System.out.print(remainingNodes[i-1]);
}
System.out.println();
int lowerBound = Integer.MAX_VALUE;
int længde = Integer.MAX_VALUE;
findTour(0, path, remainingNodes, lowerBound, længde);
}
//Her er metoden som indeholder selve algoritmen, hvor problemet findes.
public int findTour(int level, int[] path, int[] remainingNodes, int lowerBound, int længde)
{
System.out.println("længde i starten af findTour(): " + længde);
System.out.print(level + ":");
for (int ci : path) {
System.out.print(" " + ci);
}
System.out.print(" -");
for (int ci : remainingNodes) {
System.out.print(" " + ci);
}
System.out.println();
int lowerBoundNew = getLowerBound(path, remainingNodes);
if (lowerBoundNew >= længde)
{
System.out.println("lowerBound >= længde");
return længde;
}
else if (path.length == test5.costMatrix.length)
{
int newLængde;
newLængde = getLængde(path);
System.out.println("newLængde: " + newLængde);
if (newLængde < længde) {
længde = newLængde;
System.out.println("længde: " + længde);
return længde;
}
else{
return længde;
}
}
else
{
int[] pathNew = new int[path.length+1];
int[] remainingNodesNew = new nt[remainingNodes.length-1];
System.arraycopy(path, 0, pathNew, 0, path.length);
for (int i = 0; i < remainingNodes.length; i++)
{
pathNew[pathNew.length-1] = remainingNodes[i];
System.arraycopy(remainingNodes, 0, remainingNodesNew, 0, i);
System.arraycopy(remainingNodes, i+1, remainingNodesNew, i, remainingNodes.length-(i+1));
findTour(level+1, pathNew, remainingNodesNew, lowerBoundNew, længde);
}
}
return længde;
}