pCurrentVertex
\ am\ geringsten\ ist.\ Der\ Knoten\ wird\ aus\ der\ Liste\r\n\ gel\u00F6scht\ und\ dann\ zur\u00FCck\ gegeben.\r\n\ \r\n\ @param\ pVertices\r\n\ @return\r\n
+numComments=8
diff --git a/Breitensuche.java b/Breitensuche.java
index f1e2461..41457d0 100644
--- a/Breitensuche.java
+++ b/Breitensuche.java
@@ -1,153 +1,235 @@
/**
- * Implementierung der Tiefensuche auf einem ungereichteten,
- * gewichteten Graphen.
+ * Implementierung der Tiefensuche auf einem ungereichteten, gewichteten
+ * Graphen.
*/
public class Breitensuche {
- private Graph g;
+ private Graph g;
+ Vertex bi;
- public Breitensuche() {
- g = new Graph();
+ public Breitensuche() {
+ g = new Graph();
- // Aufbau des Graphen
- // Erstellen der Knoten (Vertices)
- Vertex koe = new Vertex("Köln");
- g.addVertex(koe);
- Vertex dues = new Vertex("Düsseldorf");
- g.addVertex(dues);
- Vertex dor = new Vertex("Dortmund");
- g.addVertex(dor);
- Vertex bi = new Vertex("Bielefeld");
- g.addVertex(bi);
- Vertex hnv = new Vertex("Hannover");
- g.addVertex(hnv);
- Vertex bo = new Vertex("Bochum");
- g.addVertex(bo);
+ // Aufbau des Graphen
+ // Erstellen der Knoten (Vertices)
+ Vertex koe = new Vertex("Köln");
+ g.addVertex(koe);
+ Vertex dues = new Vertex("Düsseldorf");
+ g.addVertex(dues);
+ Vertex dor = new Vertex("Dortmund");
+ g.addVertex(dor);
+ bi = new Vertex("Bielefeld");
+ g.addVertex(bi);
+ Vertex hnv = new Vertex("Hannover");
+ g.addVertex(hnv);
+ Vertex bo = new Vertex("Bochum");
+ g.addVertex(bo);
- // Erstellen der Kanten (Edges)
- g.addEdge(new Edge(koe, dor, 96.0));
- g.addEdge(new Edge(dues, dor, 70.0));
- g.addEdge(new Edge(dor, bo, 22.0));
- g.addEdge(new Edge(bi, hnv, 113.0));
- g.addEdge(new Edge(bi, dor, 112.0));
- g.addEdge(new Edge(bi, dues, 178.0));
- g.addEdge(new Edge(bo, dues, 52.0));
- }
+ // Erstellen der Kanten (Edges)
+ g.addEdge(new Edge(koe, dor, 96.0));
+ g.addEdge(new Edge(dues, dor, 70.0));
+ g.addEdge(new Edge(dor, bo, 22.0));
+ g.addEdge(new Edge(bi, hnv, 113.0));
+ g.addEdge(new Edge(bi, dor, 112.0));
+ g.addEdge(new Edge(bi, dues, 178.0));
+ g.addEdge(new Edge(bo, dues, 52.0));
+ }
- /**
- * Suche nach einem Vertex mit der angegebenen ID mittels der Breitensuche.
- * @param pVertexID
- * @return
- */
- public boolean findVertex( String pVertexID ) {
- g.setAllVertexMarks(false); // Markierungen zurücksetzen
- QueuepCurrentVertex
am geringsten ist. Der Knoten wird aus der Liste
+ * gelöscht und dann zurück gegeben.
+ *
+ * @param pVertices
+ * @return
+ */
+ private Vertex getVertexFromListByWeight(Vertex pCurrentVertex, ListpCurrentVertex
am geringsten ist. Der Knoten wird
- * aus der Liste gelöscht und dann zurück
- * gegeben.
- * @param pVertices
- * @return
- */
- private Vertex getVertexFromListByWeight( Vertex pCurrentVertex, List\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\\r\n\ Klasse\ Edge\r\n\
\r\n\\r\n\ Die\ Klasse\ Edge\ stellt\ eine\ einzelne,\ ungerichtete\ Kante\ eines\ Graphen\ dar.\ \r\n\ Beim\ Erstellen\ werden\ die\ beiden\ durch\ sie\ zu\ verbindenden\ Knotenobjekte\ und\ eine\ \r\n\ Gewichtung\ als\ double\ uebergeben.\ Beide\ Knotenobjekte\ koennen\ abgefragt\ werden.\ \r\n\ Des\ Weiteren\ koennen\ die\ Gewichtung\ und\ eine\ Markierung\ gesetzt\ und\ abgefragt\ werden.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Oktober\ 2015\r\n +comment1.params=pVertex\ pAnotherVertex\ pWeight +comment1.target=Edge(Vertex,\ Vertex,\ double) +comment1.text=\r\n\ Ein\ neues\ Objekt\ vom\ Typ\ Edge\ wird\ erstellt.\ Die\ von\ diesem\ Objekt\ \r\n\ repraesentierte\ Kante\ verbindet\ die\ Knoten\ pVertex\ und\ pAnotherVertex\ mit\ der\ \r\n\ Gewichtung\ pWeight.\ Ihre\ Markierung\ hat\ den\ Wert\ false.\r\n +comment2.params= +comment2.target=Vertex[]\ getVertices() +comment2.text=\r\n\ Die\ Anfrage\ gibt\ die\ beiden\ Knoten,\ die\ durch\ die\ Kante\ verbunden\ werden,\ als\ neues\ Feld\ vom\ Typ\ Vertex\ zurueck.\ Das\ Feld\ hat\ \r\n\ genau\ zwei\ Eintraege\ mit\ den\ Indexwerten\ 0\ und\ 1.\r\n +comment3.params=pWeight +comment3.target=void\ setWeight(double) +comment3.text=\r\n\ Der\ Auftrag\ setzt\ das\ Gewicht\ der\ Kante\ auf\ pWeight.\r\n +comment4.params= +comment4.target=double\ getWeight() +comment4.text=\r\n\ Die\ Anfrage\ liefert\ das\ Gewicht\ der\ Kante\ als\ double.\r\n +comment5.params=pMark +comment5.target=void\ setMark(boolean) +comment5.text=\r\n\ Der\ Auftrag\ setzt\ die\ Markierung\ der\ Kante\ auf\ den\ Wert\ pMark.\r\n +comment6.params= +comment6.target=boolean\ isMarked() +comment6.text=\r\n\ Die\ Anfrage\ liefert\ true,\ wenn\ die\ Markierung\ der\ Kante\ den\ Wert\ true\ hat,\ ansonsten\ false.\r\n +numComments=7 diff --git a/Graph.class b/Graph.class new file mode 100644 index 0000000..d5cb3a3 Binary files /dev/null and b/Graph.class differ diff --git a/Graph.ctxt b/Graph.ctxt new file mode 100644 index 0000000..063074e --- /dev/null +++ b/Graph.ctxt @@ -0,0 +1,52 @@ +#BlueJ class context +comment0.target=Graph +comment0.text=\r\n\\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\\r\n\ Klasse\ Graph\r\n\
\r\n\\r\n\ Die\ Klasse\ Graph\ stellt\ einen\ ungerichteten,\ kantengewichteten\ Graphen\ dar.\ Es\ koennen\ \r\n\ Knoten-\ und\ Kantenobjekte\ hinzugefuegt\ und\ entfernt,\ flache\ Kopien\ der\ Knoten-\ und\ Kantenlisten\ \r\n\ des\ Graphen\ angefragt\ und\ Markierungen\ von\ Knoten\ und\ Kanten\ gesetzt\ und\ ueberprueft\ werden.\r\n\ Des\ Weiteren\ kann\ eine\ Liste\ der\ Nachbarn\ eines\ bestimmten\ Knoten,\ eine\ Liste\ der\ inzidenten\ \r\n\ Kanten\ eines\ bestimmten\ Knoten\ und\ die\ Kante\ von\ einem\ bestimmten\ Knoten\ zu\ einem\ \r\n\ anderen\ bestimmten\ Knoten\ angefragt\ werden.\ Abgesehen\ davon\ kann\ abgefragt\ werden,\ welches\ \r\n\ Knotenobjekt\ zu\ einer\ bestimmten\ ID\ gehoert\ und\ ob\ der\ Graph\ leer\ ist.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Oktober\ 2015\r\n +comment1.params= +comment1.target=Graph() +comment1.text=\r\n\ Ein\ Objekt\ vom\ Typ\ Graph\ wird\ erstellt.\ Der\ von\ diesem\ Objekt\ \r\n\ repraesentierte\ Graph\ ist\ leer.\r\n +comment10.params=pMark +comment10.target=void\ setAllEdgeMarks(boolean) +comment10.text=\r\n\ Der\ Auftrag\ setzt\ die\ Markierungen\ aller\ Kanten\ des\ Graphen\ auf\ pMark.\r\n +comment11.params= +comment11.target=boolean\ allVerticesMarked() +comment11.text=\r\n\ Die\ Anfrage\ liefert\ true,\ wenn\ alle\ Knoten\ des\ Graphen\ mit\ true\ markiert\ sind,\ ansonsten\ false.\r\n +comment12.params= +comment12.target=boolean\ allEdgesMarked() +comment12.text=\r\n\ Die\ Anfrage\ liefert\ true,\ wenn\ alle\ Kanten\ des\ Graphen\ mit\ true\ markiert\ sind,\ ansonsten\ false.\r\n +comment13.params=pVertex +comment13.target=List\ getNeighbours(Vertex) +comment13.text=\r\n\ Die\ Anfrage\ liefert\ alle\ Nachbarn\ des\ Knotens\ pVertex\ als\ neue\ Liste\ vom\ Typ\ List\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\\r\n\ Generische\ Klasse\ List
\r\n\ Objekt\ der\ generischen\ Klasse\ List\ verwalten\ beliebig\ viele\ linear\r\n\ angeordnete\ Objekte\ vom\ Typ\ ContentType.\ Auf\ hoechstens\ ein\ Listenobjekt,\r\n\ aktuellesObjekt\ genannt,\ kann\ jeweils\ zugegriffen\ werden.
\r\n\ Wenn\ eine\ Liste\ leer\ ist,\ vollstaendig\ durchlaufen\ wurde\ oder\ das\ aktuelle\r\n\ Objekt\ am\ Ende\ der\ Liste\ geloescht\ wurde,\ gibt\ es\ kein\ aktuelles\ Objekt.
\r\n\ Das\ erste\ oder\ das\ letzte\ Objekt\ einer\ Liste\ koennen\ durch\ einen\ Auftrag\ zum\r\n\ aktuellen\ Objekt\ gemacht\ werden.\ Ausserdem\ kann\ das\ dem\ aktuellen\ Objekt\r\n\ folgende\ Listenobjekt\ zum\ neuen\ aktuellen\ Objekt\ werden.\
\r\n\ Das\ aktuelle\ Objekt\ kann\ gelesen,\ veraendert\ oder\ geloescht\ werden.\ Ausserdem\r\n\ kann\ vor\ dem\ aktuellen\ Objekt\ ein\ Listenobjekt\ eingefuegt\ werden.\r\n\
\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\\r\n\ Generische\ Klasse\ Queue
\r\n\ Objekte\ der\ generischen\ Klasse\ Queue\ (Warteschlange)\ verwalten\ beliebige\r\n\ Objekte\ vom\ Typ\ ContentType\ nach\ dem\ First-In-First-Out-Prinzip,\ d.h.,\ das\r\n\ zuerst\ abgelegte\ Objekt\ wird\ als\ erstes\ wieder\ entnommen.\ Alle\ Methoden\ haben\r\n\ eine\ konstante\ Laufzeit,\ unabhaengig\ von\ der\ Anzahl\ der\ verwalteten\ Objekte.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Generisch_02\ 2014-02-21\r\n +comment1.params= +comment1.target=Queue() +comment1.text=\r\n\ Eine\ leere\ Schlange\ wird\ erzeugt.\ \r\n\ Objekte,\ die\ in\ dieser\ Schlange\ verwaltet\ werden,\ muessen\ vom\ Typ\r\n\ ContentType\ sein.\r\n +comment2.params= +comment2.target=boolean\ isEmpty() +comment2.text=\r\n\ Die\ Anfrage\ liefert\ den\ Wert\ true,\ wenn\ die\ Schlange\ keine\ Objekte\ enthaelt,\ \r\n\ sonst\ liefert\ sie\ den\ Wert\ false.\r\n\ \r\n\ @return\ true,\ falls\ die\ Schlange\ leer\ ist,\ sonst\ false\r\n +comment3.params=pContent +comment3.target=void\ enqueue(java.lang.Object) +comment3.text=\r\n\ Das\ Objekt\ pContentType\ wird\ an\ die\ Schlange\ angehaengt.\ \r\n\ Falls\ pContentType\ gleich\ null\ ist,\ bleibt\ die\ Schlange\ unveraendert.\r\n\ \r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ das\ anzuhaengende\ Objekt\ vom\ Typ\ ContentType\r\n +comment4.params= +comment4.target=void\ dequeue() +comment4.text=\r\n\ Das\ erste\ Objekt\ wird\ aus\ der\ Schlange\ entfernt.\ \r\n\ Falls\ die\ Schlange\ leer\ ist,\ wird\ sie\ nicht\ veraendert.\r\n +comment5.params= +comment5.target=java.lang.Object\ front() +comment5.text=\r\n\ Die\ Anfrage\ liefert\ das\ erste\ Objekt\ der\ Schlange.\ \r\n\ Die\ Schlange\ bleibt\ unveraendert.\ \r\n\ Falls\ die\ Schlange\ leer\ ist,\ wird\ null\ zurueckgegeben.\r\n\r\n\ @return\ das\ erste\ Objekt\ der\ Schlange\ vom\ Typ\ ContentType\ oder\ null,\r\n\ \ \ \ \ \ \ \ \ falls\ die\ Schlange\ leer\ ist\r\n +numComments=6 diff --git a/Vertex.class b/Vertex.class new file mode 100644 index 0000000..85da5ae Binary files /dev/null and b/Vertex.class differ diff --git a/Vertex.ctxt b/Vertex.ctxt new file mode 100644 index 0000000..19a4aa8 --- /dev/null +++ b/Vertex.ctxt @@ -0,0 +1,16 @@ +#BlueJ class context +comment0.target=Vertex +comment0.text=\r\n\\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\
\r\n\\r\n\ Klasse\ Vertex\r\n\
\r\n\\r\n\ Die\ Klasse\ Vertex\ stellt\ einen\ einzelnen\ Knoten\ eines\ Graphen\ dar.\ Jedes\ Objekt\ \r\n\ dieser\ Klasse\ verfuegt\ ueber\ eine\ im\ Graphen\ eindeutige\ ID\ als\ String\ und\ kann\ diese\ \r\n\ ID\ zurueckliefern.\ Darueber\ hinaus\ kann\ eine\ Markierung\ gesetzt\ und\ abgefragt\ werden.\r\n\
\r\n\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Oktober\ 2015\r\n +comment1.params=pID +comment1.target=Vertex(java.lang.String) +comment1.text=\r\n\ Ein\ neues\ Objekt\ vom\ Typ\ Vertex\ wird\ erstellt.\ Seine\ Markierung\ hat\ den\ Wert\ false.\r\n +comment2.params= +comment2.target=java.lang.String\ getID() +comment2.text=\r\n\ Die\ Anfrage\ liefert\ die\ ID\ des\ Knotens\ als\ String.\r\n +comment3.params=pMark +comment3.target=void\ setMark(boolean) +comment3.text=\r\n\ Der\ Auftrag\ setzt\ die\ Markierung\ des\ Knotens\ auf\ den\ Wert\ pMark.\r\n +comment4.params= +comment4.target=boolean\ isMarked() +comment4.text=\r\n\ Die\ Anfrage\ liefert\ true,\ wenn\ die\ Markierung\ des\ Knotens\ den\ Wert\ true\ hat,\ ansonsten\ false.\r\n +numComments=5 diff --git a/package.bluej b/package.bluej index 677f390..300e18d 100644 --- a/package.bluej +++ b/package.bluej @@ -1,26 +1,50 @@ #BlueJ package file -dependency1.from=BinarySearchTree -dependency1.to=ComparableContent +dependency1.from=BreitensucheTest +dependency1.to=Breitensuche dependency1.type=UsesDependency -dependency2.from=Racingsimulator -dependency2.to=Athlete +dependency10.from=Breitensuche +dependency10.to=Queue +dependency10.type=UsesDependency +dependency2.from=Graph +dependency2.to=List dependency2.type=UsesDependency -editor.fx.0.height=738 -editor.fx.0.width=816 -editor.fx.0.x=466 -editor.fx.0.y=146 -objectbench.height=100 -objectbench.width=1256 +dependency3.from=Graph +dependency3.to=Vertex +dependency3.type=UsesDependency +dependency4.from=Graph +dependency4.to=Edge +dependency4.type=UsesDependency +dependency5.from=Edge +dependency5.to=Vertex +dependency5.type=UsesDependency +dependency6.from=Breitensuche +dependency6.to=Graph +dependency6.type=UsesDependency +dependency7.from=Breitensuche +dependency7.to=Vertex +dependency7.type=UsesDependency +dependency8.from=Breitensuche +dependency8.to=Edge +dependency8.type=UsesDependency +dependency9.from=Breitensuche +dependency9.to=List +dependency9.type=UsesDependency +editor.fx.0.height=1416 +editor.fx.0.width=2576 +editor.fx.0.x=-8 +editor.fx.0.y=-8 +objectbench.height=193 +objectbench.width=2536 package.divider.horizontal=0.6 -package.divider.vertical=0.881243063263041 -package.editor.height=787 -package.editor.width=1145 +package.divider.vertical=0.8480243161094225 +package.editor.height=1109 +package.editor.width=2425 package.editor.x=0 package.editor.y=0 -package.frame.height=1000 -package.frame.width=1296 -package.numDependencies=2 -package.numTargets=4 +package.frame.height=1416 +package.frame.width=2576 +package.numDependencies=10 +package.numTargets=7 package.showExtends=true package.showUses=true project.charset=UTF-8 @@ -30,30 +54,51 @@ readme.width=47 readme.x=10 readme.y=10 target1.height=50 -target1.name=Racingsimulator +target1.name=BreitensucheTest target1.showInterface=false target1.type=ClassTarget target1.width=130 -target1.x=450 -target1.y=472 +target1.x=1060 +target1.y=520 target2.height=50 -target2.name=ComparableContent +target2.name=Vertex target2.showInterface=false -target2.type=InterfaceTarget -target2.width=250 -target2.x=160 -target2.y=270 +target2.type=ClassTarget +target2.width=80 +target2.x=500 +target2.y=550 target3.height=50 -target3.name=Athlete +target3.name=Graph target3.showInterface=false target3.type=ClassTarget -target3.width=90 -target3.x=280 -target3.y=550 +target3.width=80 +target3.x=740 +target3.y=120 target4.height=50 -target4.name=BinarySearchTree +target4.name=Breitensuche target4.showInterface=false target4.type=ClassTarget -target4.width=230 -target4.x=370 -target4.y=90 +target4.width=100 +target4.x=110 +target4.y=430 +target5.height=50 +target5.name=List +target5.showInterface=false +target5.type=ClassTarget +target5.width=150 +target5.x=840 +target5.y=220 +target6.height=50 +target6.name=Edge +target6.showInterface=false +target6.type=ClassTarget +target6.width=80 +target6.x=330 +target6.y=640 +target7.height=50 +target7.name=Queue +target7.showInterface=false +target7.type=ClassTarget +target7.width=160 +target7.x=850 +target7.y=360