Avatar billede iceyblue Nybegynder
06. september 2002 - 16:08 Der er 3 kommentarer

Graph: SpanningTree

Hvem kan hjælpe med denne opgave?? Det er utrolig vigtigt for mig at få den løst, men nu er jeg næsten gået død i den. Jeg har oprettet en vægtet (ikke orienteret) graf. Denne kan jeg indsætte noder og kanter i. Derudover kan den udskrives.

Det næste der står i opgaven er så, at lave en metode der kan finde og udskrive et minimum spanning tree for grafen.

Den metode jeg har lavet til dette formål hedder Prims() og findes nede i koden. Grafen er bygget op af et array-linked-list. Ligger nogen inde med en færdig metode, som jeg kan bruge, eller kan nogen gennemskue det sidste som skal skrives??? Håber på en god løsning. Ønskes mere uddybet så bare skriv!!

Her her følger koden:

class Graf
{
  Node[] graf;
  PNode first;
  boolean[] visited;

  public Graf(int antalNoder)
  {
    graf  =new Node[antalNoder];
    first  =null;
    visited=new boolean[antalNoder];
  }
 
  private class Node
  {
    int betegnelse;
    int vægt;
    Node next;
       
    public Node(int b,Node n,int v)
    {
      betegnelse=b;
      vægt=v;
      next=n;
    }
  }
 
  public void indsæt(int fra,int til,int vægt)
  {
    graf[fra]=new Node(til,graf[fra],vægt);
    graf[til]=new Node(fra,graf[til],vægt);
  }
 
  public void udskrivGraf()
  {
    for (int i=0;i<graf.length;i++)
    {
      System.out.print("Node: " + i + " forbindelser til: ");
      Node temp=graf[i];
      while (temp!=null)
      {
        System.out.print(temp.betegnelse+" "+" ("+"weight= "+temp.vægt+")"+" ");
        temp=temp.next;   
      }
      System.out.println();
    }   
  }
 
  class PNode
  {
      int fra;
      int til;
      int vægt;
      PNode next;
     
      public PNode(int f,int t, int v,PNode n)
      {
          fra = f;
          til = t;
          vægt = v;
          next = n;
      }
  } 
 
  private void indsaet(int fra,int til,int vægt)
  {
      PNode temp=new PNode(fra,til,vægt,null);
      if (first==null)
          first=temp;
         
          else
          {
              PNode curr = first;
              PNode prev = null;
             
              while(curr != null && curr.vægt < temp.vægt)
              {
                  prev = curr;
                  curr = curr.next;
              }
          }     
  } 
 
  public void prim(int v)
  {
      for (int i=0;i<visited.length;i++)
          visited [i] = false;
      visited[v] = true;
     
     
      Node curr = graf(v);
      while (curr!=null)
      {
          if (!visited[betegnelse])
              indsaet(curr.v,curr.betegnelse,curr.vægt);
          curr=curr.next;
      }
  }    
 

  public static void main(String args[]) throws Exception
  {
    Graf g=new Graf(7);
    Graf v=new Graf(7);
    g.indsæt(0,1,28);
    g.indsæt(0,5,10);
    g.indsæt(1,2,16);
    g.indsæt(1,6,14);
    g.indsæt(2,3,12);
    g.indsæt(3,4,22);
    g.indsæt(3,6,18);
    g.indsæt(4,6,24);
    g.indsæt(4,5,25);
   
    v.prim(0);
    g.udskrivGraf();
   
  }
}
Avatar billede rudidanmark Nybegynder
08. september 2002 - 17:43 #1
Jeg har en gang haft noget om spanning tree's, men kan ikke huske ret meget fra det :) Jeg prøvede at slå det op i min datastruktur bog, og så under vægtede grafer at der findes en færdig algoritme til den slags kaldet "Kruskals algoritme", som skulle finde den korteste vej en vægtet (ikke orienteret) graf. Hvis du prøver at søge på google kan du finde meget om den. Min bog hedder "An Introduktion to Data structures and algoritms with java" ISBN: 0138577498. Håber du kan bruge det til noget og god fornøjelse
Avatar billede magoo20000 Nybegynder
09. september 2002 - 22:26 #2
Måske kan følgende links hjælpe dig på vejen:
http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/faq/faq.shtml
http://www.hta-bi.bfh.ch/~hew/java/software/
MinimalSpanningTree/prim/MinimalSpanningTree.java
Avatar billede iceyblue Nybegynder
10. september 2002 - 11:44 #3
Tak for svar!! Desværre er eksemplerne med matrix. Min Prim-metode skal kunne arbejde på en array-linked-liste :(
hmmmm...er der virkelig ingen som kender svaret, eller hvor jeg kan finde en nogenlunde løsning???
Disky, hjælp!!!!!!! ;)
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