Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  0 481
Hei igjen, søker nok engang litt småhjelp fra kloke hoder ( mitt er ikke klokt nok )

Litt om problemet først her:
Jeg har laget og fylt opp en graf med vertexer og edger. Vertexene er maskinnavn, og edgene er en "komponentkabel" mellom disse. Vertex inneholder kun datamaskinnavnet, og edgen inneholder lengden på kabelen mellom vertexene den kobler sammen.

Jeg prøver ved hjelp av en BFS travasering av grafen og lage en liste over datamaskiner som kan ligge på samme komponentkabel, gitt en makslengde på kabelen mellom disse. Altså om en har en graf seende slik ut:
"
flue veps 6
sommerfugl nattsvermer 8
veps sommerfugl 1
flue nattsvermer 9
flue sommerfugl 2
maur nattsvermer 5
"
Og maks tillat lengde på kabelen er 7 meter, skal resultatet komme ut slik:
Komponent 1:
flue
veps
sommerfugl

Komponent 2:
nattsvermer
maur


Problemet mitt:
Jeg har laget en BFS algoritme, den ser slik ut:

Kode

    private void BFS(Vertex<V> v){
        Queue<Vertex<V>> q = new Queue<Vertex<V>>();        
        Vertex w;
        Edge<Integer> e;
        int i=0;
        v.put(status, visited);
        q.enqueue(v);        
        while(!q.empty()){
            i+=1;
            ArrayList<Vertex<V>> currLevel = new ArrayList<Vertex<V>>();
            Vertex u = q.dequeue();          
            for(Iterator iter = G.incidentEdges(u).iterator(); iter.hasNext();){
                e = (Edge<Integer>)iter.next();
                if(e.get(status).equals(unvisited)){
                    w = G.opposite(u, e);
                    if(w.get(status).equals(unvisited)){
                        e.put(status, discovery);
                        w.put(status, visited);
                        q.enqueue(w);
                        currLevel.add(w);
                        visitDiscovery(w, e, currLevel);     
                        if(isDone)break;
                    }
                    else{
                        e.put(status, cross);
                        w = G.opposite(u, e);
                        visitCross(w,e,currLevel);
                        if(isDone)break;
                    }
                }
            } 
            visitAfter(currLevel);
            if(isDone)break;
        }
    }
Alle visitmetodene er kun laget for å kunne utføre generelle operasjoner under travaseringen.

Er det noen som kan hjelpe meg litt på vei med hva jeg må gjøre for å løse problemstillingen jeg nevnte?

Jeg har prøvd endel forskjellig, men får det ikke til. Ønsker all hjelp velkommen
P.S: Det er godt mulig BFS algoritmen min ikke er korrekt også, første gang jeg har laget en.