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=7
diff --git a/Breitensuche.java b/Breitensuche.java
index f1e2461..20db6fd 100644
--- a/Breitensuche.java
+++ b/Breitensuche.java
@@ -1,153 +1,184 @@
/**
- * 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;
- 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);
+ Vertex 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..4b95cb5 100644 --- a/package.bluej +++ b/package.bluej @@ -1,26 +1,50 @@ #BlueJ package file -dependency1.from=BinarySearchTree -dependency1.to=ComparableContent +dependency1.from=Graph +dependency1.to=List dependency1.type=UsesDependency -dependency2.from=Racingsimulator -dependency2.to=Athlete +dependency10.from=Breitensuche +dependency10.to=List +dependency10.type=UsesDependency +dependency2.from=Graph +dependency2.to=Vertex 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=Edge +dependency3.type=UsesDependency +dependency4.from=Edge +dependency4.to=Vertex +dependency4.type=UsesDependency +dependency5.from=BreitensucheTest +dependency5.to=Breitensuche +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=Queue +dependency9.type=UsesDependency +editor.fx.0.height=0 +editor.fx.0.width=0 +editor.fx.0.x=0 +editor.fx.0.y=0 +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.type=UnitTestTargetJunit4 target1.width=130 -target1.x=450 -target1.y=472 +target1.x=990 +target1.y=540 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=800 +target2.y=400 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=650 +target3.y=450 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=870 +target4.y=610 +target5.height=50 +target5.name=List +target5.showInterface=false +target5.type=ClassTarget +target5.width=150 +target5.x=730 +target5.y=510 +target6.height=50 +target6.name=Edge +target6.showInterface=false +target6.type=ClassTarget +target6.width=80 +target6.x=720 +target6.y=340 +target7.height=50 +target7.name=Queue +target7.showInterface=false +target7.type=ClassTarget +target7.width=160 +target7.x=720 +target7.y=280