# gerichtete und gewichtete Multi-Graph



## ihdnag8 (2. Juli 2007)

Hallo 

Ich möchte einen gerichteten und gewichteten Multi-Graphen in java Implementieren.
Dazu habe ich mir eine Klasse für Kanten und eine Klasse für Knoten erstellt.
In der Klasse Graph wird der eigentliche Graph implementiert. 
Nun bin ich mir nicht sicher welche Container für die Kanten und Knoten in der Klasse Graph benutzen soll. Ich würde für die Kanten ein HashSet benutzen. Und in einer HashMap speichere ich die Knoten als key und die dazugehörigen Kanten als value. HashMap<Knoten,HashSet<Kanten>.
Die Gewichtung der Kanten muss ich in der Klasse Graph,so ist es in der Aufgabenstellung verlangt. Bevor ich jetzt mit etwas schwierigeren Algorithmen (Dijkstra, Bellman Ford) wollte ich ob ich den richtigen Container verwendet habe. 

Klasse Knoten

```
public class Knoten {
   private String beschreibung;

    * Erzeugt einen neuen Knoten mit Beschreibung.
    */
   Knoten(String be){
       beschreibung = be;
   }

   public String getBeschreibung(){
       return beschreibung;
   }


}//class Knoten
```

Klasse Kanten

```
public class Kanten {

   private Knoten start;
   private Knoten end;
   private String beschreibung;
   /**
    * Erzeugt eine neue Kante mit Start und End Knoten.
    */
   public Kanten(Knoten start, Knoten end, String be)  {
       this.start = start;
       this.end = end;
      beschreibung = be;
   }

     public Knoten getEndKnoten(){
       return end;
   }
     public Knoten getStartKnoten(){
       return start;
   }
     
     public String getBeschreibung(){
       return beschreibung;
   }  

}//class Kanten
```


Klasse Graph:

```
import java.util.*;


public class Graph{

    private HashMap<Knoten, HashSet<Kanten>> knoten;
    private HashMap<Kanten, Double> kanten;


    public Graph() {
        knoten = new HashMap<Knoten, HashSet<Kanten>>();
        kanten = new HashMap<Kanten, Double>();
    }

    public void add(Kante kante){
            kanten.put(kante, 1.0);
            HashSet<Kanten> ka = knoten.get(kante.getStartKnoten());
            ka.add(kante);
    }
    
    
    public void add(Knoten knote){
        knoten.put(knote, new HashSet<Kanten>());
    } 

    public void setGewicht(Kanten kante, double gewicht){      
        kanten.put(kante, gewicht);
    }//class Graph
```

Danke


----------



## MeinerEiner_80 (2. Juli 2007)

Moin!
Hier gibts ne Übersicht über die Vor- und Nachteile der einzelnen Collection Klassen:
http://www.torsten-horn.de/techdocs/java-collections.htm

Die Anforderungern an dein Programm kennst du selber ja am besten. Musst also du entscheiden, was du als optimal erachtest..

*grüssle*
MeinerEiner


----------

