Avatar billede chr_juel Nybegynder
15. december 2006 - 11:28 Der er 1 løsning

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;
}
Avatar billede chr_juel Nybegynder
15. december 2006 - 13:58 #1
Problemet er løst, så I behøver ikke kigge på det længere..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester