• Keine Ergebnisse gefunden

Übung 6: Graphen

N/A
N/A
Protected

Academic year: 2022

Aktie "Übung 6: Graphen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übung 6: Graphen

Abgabetermin: 10.05.2011

Name: __________________________________________ Matrikelnummer: _________________

Gruppe: ☐ G1 Di 10:15 ☐ G2 Di 11:00 ☐ G3 Di 12:45

Aufgabe Punkte gelöst abzugeben

schriftlich

abzugeben elektronisch

Korr. Punkte

Aufgabe 1 24 Java-Programm, Testfälle und

Ergebnisse Java-Programm

Aufgabe 1: DFS, BFS, Minimal Spanning Tree, ShortestPath (24 Punkte)

Implementieren Sie einen Graphen der Knoten (vertex) und Kanten (edge) zwischen diesen Knoten spei- chern kann. Knoten speichern einen Buchstaben. Kanten können ungerichtet oder gerichtet und ungewichtet oder gewichtet sein. Implementieren Sie für den Graphen folgende Algorithmen: Depth-First-Search, Breadth-First-Search, Minimal Spanning Tree und Shortest Path. Folgendes Beispiel zeigt wie der Graph verwendet wird und was ausgegeben wird:

Graph  g  =  new  Graph();

Vertex  a  =  new  Vertex('A',  true);    g.addVertex(a);

     b  =  new  Vertex('B',  false);  g.addVertex(b);

     c  =  new  Vertex('C',  false);  g.addVertex(c);

     d  =  new  Vertex('D',  false);  g.addVertex(d);

g.addEdge(new  Edge(a,  b,  0,  Edge.Kind.Undirected));

g.addEdge(new  Edge(b,  c,  0,  Edge.Kind.Undirected));

g.addEdge(new  Edge(b,  d,  0,  Edge.Kind.Undirected));

g.addEdge(new  Edge(c,  a,  0,  Edge.Kind.Undirected));

g.makeDot("g.dot");

g.depthFirstSearch();

g.breadthFirstSearch();

g.makeMinimalSpanningTree(a);

g.makeDot("mst.dot");

g.makeShortestPath(a,  d);

g.makeDot("sp.dot");

Implementieren Sie die Klassen Graph, Vertex und Edge mit folgenden Schnittstellen (alles public):

class  Graph  {

   ArrayList  vertices,  edges;

   Graph()  {  ...  }

   void  addVertex(Vertex  v)  {  ...  }    void  addEdge(Edge  e)  {  ...  }

   void  makeDot(String  filename)  {  ...  }    void  depthFirstSearch()  {  ...  }    void  breadthFirstSearch()  {  ...  }    void  makeMinimalSpanningTree(

       Vertex  start)  {  ...  }    void  makeShortestPath(

       Vertex  from,  Vertex  to)  {  ...  } }

class  Vertex  implements  Comparable  {    final  char  value;

   final  boolean  isRoot;

   Vertex(char  value,  boolean  isRoot)  {  ...  }    int  compareTo(Object  o)  {  ...  }

   boolean  equals(Object  o)  {  ...  }    int  hashCode()  {  ...  }

}

class  Edge  {

   enum  Kind  {  Directed,  Undirected  }    final  Vertex  start;

   final  Vertex  end;

   final  int  weight;

   final  Kind  kind;

   Edge(Vertex  start,  Vertex  end,        int  weight,  Kind  kind)  {  ...  }    boolean  equals(Object  o)  {  ...  }    int  hashCode()  {  ...  }

}

Übung Praktische Informatik 2 SS 2011

mst.dot

g.dot

sp.dot DFS

A CB B CD D C C BFS A BC B CD C D D

(2)

Implementierungshinweise:

a) Die Methode addVertex soll nur einen Wurzelknoten erlauben. Die Methode addEdge soll nur Kanten mit bekannten Knoten erlauben und Duplikate verbieten. Lösen Sie Exceptions aus, wenn diese Regeln verletzt werden.

b) Die MethodemakeDot(String filename)erstellt eine Datei zur Anzeige in GraphViz (http://graphviz.org).

Verwenden Sie dazuDotMakerGraph.makeDot(Graph g) aus der Vorgabe. Achtung, die Vorgabe setzt die Schnittstelle von Graph, Vertex und Edge wie oben spezifziert voraus.

c) Die MethodendepthFirstSearchundbreadthFirstSearch durchlaufen den Graphen und geben jeden be- suchten Knoten und dazu den aktuellen von Stack- bzw. Queueinhalt aus (siehe Abbildung auf Seite 1).

Verwenden Sie die Klassen java.util.Stack bzw. java.util.LinkedList aus dem JDK.

d) Die MethodenmakeMinimalSpanningTreeundmakeShortestPathsollen direkt die Kanten des Graphen, für den diese Methoden aufgerufen werden, verändern.

e) Wenn Sie fürmakeMinimalSpanningTree undmakeShortestPath zusätzliche Felder benötigen, zB min- Weight oder heapPos, ergänzen Sie diese in der Klasse Vertex.

f) FürmakeMinimalSpanningTreeundmakeShortestPathbenötigen Sie einen Heap. Die KlasseVertexim- plementiertComparable, d.h. Sie können Ihren Heap aus Übung 5 verwenden. Passen Sie Ihre Heap-Im- plementierung an, wo notwendig. Implementieren Sie die Methode compareTo in Vertex so, dass der Heap wie gewünscht sortiert.

g) DieDotMakerGraph-Vorgabedatei zeichnet Kanten mitkind == Edge.Kind.Directedals gerichtete Kan- ten und beschriftet Kanten mit weight != 0 mit dem Kantengewicht.

Abzugeben ist: Java-Programm, Testfälle und Ergebnisse

Übung Praktische Informatik 2 SS 2011

Referenzen

ÄHNLICHE DOKUMENTE

Computer-gestützte Programme für das Ge- wichtsmanagmeent seien zwar weniger wirk- sam als persönliche Interventionen, aber auf jeden FAll besser als nichts und auch ange- sichts

  Dieser Knoten erzeugt in jedem Frame eine Transformation, die dafür sorgt, daß die lokale z-Achse zum aktuellen Viewpoint zeigt..   axisOfRotation wird im

  Felder mit einem Namen zzz, die den Access-Type exposedField haben, haben implizit den Namen zzz_changed, wenn sie als Ausgabe-Feld verwendet werden, und den Namen set_zzz,

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop & Go Ereignisse verändert. Bei einer minimal

„ Siehe Bild: Für jeden Knoten sind alle Daten links kleiner und alle Daten rechts größer als die Daten des

Und wenn ich das tue, möchte ich auch nicht Toleranz in Anspruch nehmen müssen - Toleranz würde ja nur bedeuten, dass ich zwar schon was und womöglich begründet dagegen habe,

Da jeder Block eines Blockgraphen vollst¨andig ist, gibt es nach dem Satz von Krausz (Satz 8.14) einen schlichten Graphen H ohne isolierte Ecken mit G ∼ = L (H). Ist G ein

Wenngleich das Konzept quattromodaler Knoten einen gewissen Interpretationsspielraum lässt – so werden etwa die Pipeline, Normal- und Breitspur sowie die Binnen- und