From bd556c4ce2edd8059e582e555489dda5bce6a5b1 Mon Sep 17 00:00:00 2001 From: maxlm128 Date: Wed, 20 Jan 2021 09:57:09 +0100 Subject: [PATCH] Bearbeitetes TODO --- Breitensuche.class | Bin 0 -> 5310 bytes Breitensuche.ctxt | 22 +++ Breitensuche.java | 350 ++++++++++++++++++++++++++---------------- Edge.class | Bin 0 -> 1000 bytes Edge.ctxt | 22 +++ Graph.class | Bin 0 -> 4217 bytes Graph.ctxt | 52 +++++++ List$ListNode.class | Bin 0 -> 1326 bytes List.class | Bin 0 -> 3387 bytes List.ctxt | 43 ++++++ Queue$QueueNode.class | Bin 0 -> 1192 bytes Queue.class | Bin 0 -> 1541 bytes Queue.ctxt | 19 +++ Vertex.class | Bin 0 -> 688 bytes Vertex.ctxt | 16 ++ package.bluej | 111 ++++++++++---- 16 files changed, 468 insertions(+), 167 deletions(-) create mode 100644 Breitensuche.class create mode 100644 Breitensuche.ctxt create mode 100644 Edge.class create mode 100644 Edge.ctxt create mode 100644 Graph.class create mode 100644 Graph.ctxt create mode 100644 List$ListNode.class create mode 100644 List.class create mode 100644 List.ctxt create mode 100644 Queue$QueueNode.class create mode 100644 Queue.class create mode 100644 Queue.ctxt create mode 100644 Vertex.class create mode 100644 Vertex.ctxt diff --git a/Breitensuche.class b/Breitensuche.class new file mode 100644 index 0000000000000000000000000000000000000000..9aeffff9febefc8d7bdb98b7dd22370a4746b224 GIT binary patch literal 5310 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\ 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 - Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + /** + * Suche nach einem Vertex mit der angegebenen ID mittels der Breitensuche. + * + * @param pVertexID + * @return + */ + public boolean findVertex(String pVertexID) { + List neighboursList = new List<>(); + Vertex searchedVertex = g.getVertex(pVertexID); + Vertex firstVertex = bi; + g.setAllVertexMarks(false); // Markierungen zurücksetzen + Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + firstVertex.setMark(true); + searchQueue.enqueue(firstVertex); + System.out.println("Beginne die Suche"); + while (!searchQueue.isEmpty()) { + Vertex RootVertex = searchQueue.front(); + System.out.println("Gehe zu den Nachbarn von" + RootVertex); + neighboursList = g.getNeighbours(RootVertex); + neighboursList.toFirst(); + searchQueue.dequeue(); + while (!neighboursList.isEmpty()) { + Vertex currentVertex = neighboursList.getContent(); + if (!currentVertex.isMarked()) { + System.out.println(currentVertex + "Wird überprüft"); + if (currentVertex.equals(searchedVertex)) { + System.out.println("Vertex wurde gefunden!"); + return true; + } + System.out.println("Vertex wird als besucht markiert, Suche wird fortgesetzt"); + currentVertex.setMark(true); + neighboursList.remove(); + } + } + } + System.out.println("Der Vertex wurde nicht gefunden!"); + // TODO: Implementiere die Breitensuche als iterativen Algorithmus: + // Reihe dazu die noch nicht markierten Nachbarknoten in die + // searchQueue ein und arbeite die Knoten in ihr der Reihe nach + // ab, bis die Queue leer ist, oder der gesuchte Knoten + // gefunden wurde. + // TODO: Ergänze deine Methode um Ausgaben, anhand derer die Abarbeitung + // deutlich wird. + // TODO: Wenn dein Algorithmus funnktioniert, kopiere die Methode und + // Erstelle Varianten, bei denen die Reihenfolge der Nachbarknoten + // modifiziert ist. Dazu + return false; + } - // TODO: Implementiere die Breitensuche als iterativen Algorithmus: - // Reihe dazu die noch nicht markierten Nachbarknoten in die - // searchQueue ein und arbeite die Knoten in ihr der Reihe nach - // ab, bis die Queue leer ist, oder der gesuchte Knoten - // gefunden wurde. - // TODO: Ergänze deine Methode um Ausgaben, anhand derer die Abarbeitung - // deutlich wird. - // TODO: Wenn dein Algorithmus funnktioniert, kopiere die Methode und - // Erstelle Varianten, bei denen die Reihenfolge der Nachbarknoten - // modifiziert ist. Dazu - return false; - } + private List getNeighbours() { + // TODO Auto-generated method stub + return null; + } - /** - * - * @param pVertexID - * @return - */ - public boolean findVertexByID( String pVertexID ) { - g.setAllVertexMarks(false); // Markierungen zurücksetzen - Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + /** + * + * @param pVertexID + * @return + */ + public boolean findVertexByID(String pVertexID) { + List neighboursList = new List<>(); + Vertex searchedVertex = g.getVertex(pVertexID); + Vertex firstVertex = bi; + g.setAllVertexMarks(false); // Markierungen zurücksetzen + Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + firstVertex.setMark(true); + searchQueue.enqueue(firstVertex); + System.out.println("Beginne die Suche"); + while (!searchQueue.isEmpty()) { + Vertex RootVertex = searchQueue.front(); + System.out.println("Gehe zu den Nachbarn von" + RootVertex); + neighboursList = g.getNeighbours(RootVertex); + searchQueue.dequeue(); + while (!neighboursList.isEmpty()) { + Vertex currentVertex = getVertexFromListByID(neighboursList); + if (!currentVertex.isMarked()) { + System.out.println(currentVertex + "Wird überprüft"); + if (currentVertex.equals(searchedVertex)) { + System.out.println("Vertex wurde gefunden!"); + return true; + } + System.out.println("Vertex wird als besucht markiert, Suche wird fortgesetzt"); + currentVertex.setMark(true); + neighboursList.remove(); + } + } + } + // TODO: Ändere die Breitensuche so ab, dass die Knoten so abgearbeitet + // werden, dass die Nachbarknoten in alphabetischer Reihenfolge + // besucht werden. + // Nutze dazu die Hilfsmethode getVertexFromListByID, um aus + // Liste der Nachbarknoten denjenigen, der alphabetisch als + // erstes kommt herauszusuchen. + return false; + } - // TODO: Ändere die Breitensuche so ab, dass die Knoten so abgearbeitet - // werden, dass die Nachbarknoten in alphabetischer Reihenfolge - // besucht werden. - // Nutze dazu die Hilfsmethode getVertexFromListByID, um aus - // Liste der Nachbarknoten denjenigen, der alphabetisch als - // erstes kommt herauszusuchen. - return false; - } + public boolean findVertexByWeight(String pVertexID) { + List neighboursList = new List<>(); + Vertex searchedVertex = g.getVertex(pVertexID); + Vertex firstVertex = bi; + g.setAllVertexMarks(false); // Markierungen zurücksetzen + Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + firstVertex.setMark(true); + searchQueue.enqueue(firstVertex); + if(firstVertex.equals(searchedVertex)) { + return true; + } + System.out.println("Beginne die Suche"); + while (!searchQueue.isEmpty()) { + Vertex RootVertex = searchQueue.front(); + System.out.println("Gehe zu den Nachbarn von" + RootVertex); + neighboursList = g.getNeighbours(RootVertex); + searchQueue.dequeue(); + while (!neighboursList.isEmpty()) { + Vertex currentVertex = getVertexFromListByWeight(RootVertex, neighboursList); + if (!currentVertex.isMarked()) { + System.out.println(currentVertex + "Wird überprüft..."); + if (currentVertex.equals(searchedVertex)) { + System.out.println("Vertex wurde gefunden!"); + return true; + } + System.out.println("Vertex wird als besucht markiert, Suche wird fortgesetzt"); + currentVertex.setMark(true); + neighboursList.remove(); + } + } + } + return false; + // TODO: Ändere die Breitensuche so ab, dass die Knoten so abgearbeitet + // werden, dass der Nachbarknoten mit der Kante mit dem geringsten + // Gewicht zuerst besucht wird. + // Nutze dazu die Hilfsmethode getVertexFromListByWeight, um aus + // Liste der Nachbarknoten denjenigen mit dem geringsten Gewicht + // herauszusuchen. + } - public boolean findVertexByWeight( String pVertexID ) { - g.setAllVertexMarks(false); // Markierungen zurücksetzen - Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + /** + * Sucht aus einer Liste von Knoten denjenigen, dessen ID alphabetisch ale + * erstes kommt. Der Knoten wird aus der Liste gelöscht und dann zurück + * gegeben. + * + * @param pVertices + * @return + */ + private Vertex getVertexFromListByID(List pVertices) { + pVertices.toFirst(); + Vertex v = pVertices.getContent(); + do { + pVertices.next(); - // TODO: Ändere die Breitensuche so ab, dass die Knoten so abgearbeitet - // werden, dass der Nachbarknoten mit der Kante mit dem geringsten - // Gewicht zuerst besucht wird. - // Nutze dazu die Hilfsmethode getVertexFromListByWeight, um aus - // Liste der Nachbarknoten denjenigen mit dem geringsten Gewicht - // herauszusuchen. - return false; - } + if (pVertices.hasAccess() && pVertices.getContent().getID().compareToIgnoreCase(v.getID()) < 0) { + v = pVertices.getContent(); + } + } while (pVertices.hasAccess()); + pVertices.toFirst(); + while (pVertices.hasAccess()) { + if (pVertices.getContent().getID().equals(v.getID())) { + break; + } + pVertices.next(); + } + pVertices.remove(); + return v; + } - /** - * Sucht aus einer Liste von Knoten denjenigen, dessen ID alphabetisch ale - * erstes kommt. Der Knoten wird aus der Liste gelöscht und dann zurück - * gegeben. - * @param pVertices - * @return - */ - private Vertex getVertexFromListByID( List pVertices ) { - pVertices.toFirst(); - Vertex v = pVertices.getContent(); - do { - pVertices.next(); + /** + * Sucht aus einer Liste von Knoten denjenigen, dessen Kantengewicht zum Konten + * pCurrentVertex 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 pVertices) { + pVertices.toFirst(); + Vertex v = pVertices.getContent(); + double weight = g.getEdge(pCurrentVertex, v).getWeight(); + do { + pVertices.next(); - if( pVertices.hasAccess() && - pVertices.getContent().getID().compareToIgnoreCase(v.getID()) < 0 ) { - v = pVertices.getContent(); - } - } while( pVertices.hasAccess() ); + if (pVertices.hasAccess() && g.getEdge(pCurrentVertex, pVertices.getContent()).getWeight() < weight) { + v = pVertices.getContent(); + } + } while (pVertices.hasAccess()); - pVertices.toFirst(); - while( pVertices.hasAccess() ) { - if( pVertices.getContent().getID().equals(v.getID()) ) { - break; - } - pVertices.next(); - } - pVertices.remove(); - return v; - } - - /** - * Sucht aus einer Liste von Knoten denjenigen, dessen Kantengewicht zum - * Konten pCurrentVertex 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 pVertices ) { - pVertices.toFirst(); - Vertex v = pVertices.getContent(); - double weight = g.getEdge(pCurrentVertex, v).getWeight(); - do { - pVertices.next(); - - if( pVertices.hasAccess() && - g.getEdge(pCurrentVertex, pVertices.getContent()).getWeight() < weight ) { - v = pVertices.getContent(); - } - } while( pVertices.hasAccess() ); - - pVertices.toFirst(); - while( pVertices.hasAccess() ) { - if( pVertices.getContent().getID().equals(v.getID()) ) { - break; - } - pVertices.next(); - } - pVertices.remove(); - return v; - } + pVertices.toFirst(); + while (pVertices.hasAccess()) { + if (pVertices.getContent().getID().equals(v.getID())) { + break; + } + pVertices.next(); + } + pVertices.remove(); + return v; + } } diff --git a/Edge.class b/Edge.class new file mode 100644 index 0000000000000000000000000000000000000000..d120dccb9ef8546220f4ae0d00a26daefbee009a GIT binary patch literal 1000 zcmZ{i-EPxB5QWdie@SZE63S0$DYQ`PIH8dM2?U1^*ew&s1@O0!+}?Tjj}AhEENY;2R9V* zM>>kbwjL`KUe%jC=(qP2>^C~>_F@IKqhKBc(QAf#yuTj~!gxzz!ON1feW%=H>ce42 zE6mlyfqr^;(9+TKpw;J1sXlB6{bmq_a-LqAaW7#G8xQHuUS8)w%C^5(9D~0*Cz+IxV zILEdUooAFwq6>sGc)Q5@6zL`FXnq{W}{*zJPbbaF$cjYB`wNy;L}ruvel$@ zD!w>vZ4qFJv*3@1Wdf&dw%FF7hV5_A-*0Qhr1>ps-aesaAKS1Y$fC7EyQx-UA{{lGwi{}6U literal 0 HcmV?d00001 diff --git a/Edge.ctxt b/Edge.ctxt new file mode 100644 index 0000000..a53437c --- /dev/null +++ b/Edge.ctxt @@ -0,0 +1,22 @@ +#BlueJ class context +comment0.target=Edge +comment0.text=\r\n\

\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 0000000000000000000000000000000000000000..d5cb3a3d957a3b67ff0ced87206fa39e2adfb61f GIT binary patch literal 4217 zcmb7HYiwLc75-*lcXxfAwPVML<0h_M>a2IyPMxL=jomcPJI&fjY&WC{ZgXwl+M77* z?RxFn6p$+QA5S49NQ?MIk|L^#N@=2k1f_yRl!8$IQK(QPejo%$fIuR(3g4Nzdv`ZZ z5S69bJ7>JsI89pV`lQKLh!zl}=<@eJv zj9Yjrju@Vf;|!cQY)r(tWm1MIQE+AT8Cl>E!?b*H2w=uS&ca!R=%QOJScWjl;Y!6-+Ju7X{3&(AHoWphF2T*<-!Ef~4c zZk%^ZgR`?nX~-#_BO9UQDLE-zkU8ULR7BrXXmrdDiHwNcDIId6U&9qq^u_h0aoEjG z&rHlM6gAUj#C|w8R>)YLYa3QAig}%FmKQ&Tic-b6RwJOoV1BMN;}**_Sh@NA=L@A} z@-RwBlkS0>q-0!YU9W`D#=Ynu3sMX=HloeOW*N?*!^SKQ**K3pqh>7Hm_xzFvwDjh zYNLpG3*5SZMH^f2oQ^dLmAt;N}^ab=Aph?Dp&G%)3k69;PkH zy;?I~lGk7|GFo<@U2tXziN*dA^=8?&$XwJ(Ibg)sivik-2N2bAA z)3Z&SlXQRHjs|`+E*v|laU4N@0d1*kP^ljx@Z>cF-$1DH8Gcpgg9>E*p38^ zY^0e_P+}VsxF21dDTXS^W5xV;G$1x*&vG_(1)-~mm>=r`+S2AT`W9kW5jT^%%m2BV zrdImXzgPcEQ!!9hJH(2Pkk zHibvvGBDHF&(?I9o#{ARktCFORF8f1atF}?Bff7V_#{0tiByNs3Yt|{>=q3x8r$i) z^d@sx0x?FHMu;RalnHLTj)R#H$H5dQ8hZmjE}<_)u{RHK-XZH+)OZ8U=KG>{DqQPS zCo>Cpj%O_~G|w}?K1;ek$1M9ij^G81;zi$?7#^pi1KOD}- znUB24ER)ch3V6^6OaW-;(iagY=JX}ho3*upKFZWAIujk z%&D9Ut!69mErjsJ@`5X@eLfpH!+S24Cl+dOuj`{zU}+p z&KDxIosbnnp2FIY|Qq6xob1N;?f_%&PXdsU#y5en#grc6y#w>Q-$K{|XFU^N5@ zFbYf&wUmLGtXU20Hw5-Rf&G@ien(&*5ZLbt;O55y_Bb1Zxu5?`x8+VB@$P5o{x$G+ zR>MmS_XKruXL_Vp#hJkTV9LicT&TVT-`01Bxw?DV7J)ypP5p%z;9uFG{>BUN@94!p zSa|EFCnZs8a{)Sje>Y75Iknw7NB)txuWRwmbbfRBOl^)3>5@JNpGtzxeC z6(m{B^|#2Hc@kwAnjW8lThtc@&fJZGLw91JS#D83Y$RfXA)>KXZj_i}S8nG+g%DL1 z5-N&TRfjFgMz5;JV=93IssUrF38z&vo>J?o_}K3AamKI9GhXwG;^ZnmMAE*RkFDgR zxx&W~`QVe9V<&m|BlV>#jH_XTUTTP*vL7Gmxq*Y#ekXQ@T0=S`>RLmgZJCQ`l6mG5 zT4c_|kcWjwlV^@(yxvoJSadNgPz0$u5mWbJz3M`j+CmaiIIc1{sd`96uO?wTfpzgo zAxR-28}~^V_ec=gG5ypC;541z#pID>XhK*&I_wo>=zJnB-Yfa1!Sh<)De?@C5-+cz c_0kXm`sEW5xq3(gFz?)`cdTMoiq`0V0coZEO#lD@ literal 0 HcmV?d00001 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.\ Hat\ der\ Knoten\r\n\ pVertex\ keine\ Nachbarn\ in\ diesem\ Graphen\ oder\ ist\ gar\ nicht\ in\ diesem\ Graphen\ enthalten,\ so\ \r\n\ wird\ eine\ leere\ Liste\ zurueckgeliefert.\r\n +comment14.params=pVertex +comment14.target=List\ getEdges(Vertex) +comment14.text=\r\n\ Die\ Anfrage\ liefert\ eine\ neue\ Liste\ alle\ inzidenten\ Kanten\ zum\ Knoten\ pVertex.\ Hat\ der\ Knoten\r\n\ pVertex\ keine\ inzidenten\ Kanten\ in\ diesem\ Graphen\ oder\ ist\ gar\ nicht\ in\ diesem\ Graphen\ enthalten,\ so\ \r\n\ wird\ eine\ leere\ Liste\ zurueckgeliefert.\r\n +comment15.params=pVertex\ pAnotherVertex +comment15.target=Edge\ getEdge(Vertex,\ Vertex) +comment15.text=\r\n\ Die\ Anfrage\ liefert\ die\ Kante,\ welche\ die\ Knoten\ pVertex\ und\ pAnotherVertex\ verbindet,\ \r\n\ als\ Objekt\ vom\ Typ\ Edge.\ Ist\ der\ Knoten\ pVertex\ oder\ der\ Knoten\ pAnotherVertex\ nicht\ \r\n\ im\ Graphen\ enthalten\ oder\ gibt\ es\ keine\ Kante,\ die\ beide\ Knoten\ verbindet,\ so\ wird\ null\ \r\n\ zurueckgeliefert.\r\n +comment16.params= +comment16.target=boolean\ isEmpty() +comment16.text=\r\n\ Die\ Anfrage\ liefert\ true,\ wenn\ der\ Graph\ keine\ Knoten\ enthaelt,\ ansonsten\ false.\r\n +comment2.params= +comment2.target=List\ getVertices() +comment2.text=\r\n\ Die\ Anfrage\ liefert\ eine\ neue\ Liste\ aller\ Knotenobjekte\ vom\ Typ\ List.\r\n +comment3.params= +comment3.target=List\ getEdges() +comment3.text=\r\n\ Die\ Anfrage\ liefert\ eine\ neue\ Liste\ aller\ Kantenobjekte\ vom\ Typ\ List.\r\n +comment4.params=pID +comment4.target=Vertex\ getVertex(java.lang.String) +comment4.text=\r\n\ Die\ Anfrage\ liefert\ das\ Knotenobjekt\ mit\ pID\ als\ ID.\ Ist\ ein\ solchen\ Knotenobjekt\ nicht\ im\ Graphen\ enthalten,\r\n\ wird\ null\ zurueckgeliefert.\r\n +comment5.params=pVertex +comment5.target=void\ addVertex(Vertex) +comment5.text=\r\n\ Der\ Auftrag\ fuegt\ den\ Knoten\ pVertex\ in\ den\ Graphen\ ein,\ sofern\ es\ noch\ keinen\r\n\ Knoten\ mit\ demselben\ ID-Eintrag\ wie\ pVertex\ im\ Graphen\ gibt\ und\ pVertex\ eine\ ID\ ungleich\ null\ hat.\ \r\n\ Ansonsten\ passiert\ nichts.\r\n +comment6.params=pEdge +comment6.target=void\ addEdge(Edge) +comment6.text=\r\n\ Der\ Auftrag\ fuegt\ die\ Kante\ pEdge\ in\ den\ Graphen\ ein,\ sofern\ beide\ durch\ die\ Kante\ verbundenen\ Knoten\r\n\ im\ Graphen\ enthalten\ sind,\ nicht\ identisch\ sind\ und\ noch\ keine\ Kante\ zwischen\ den\ Knoten\ existiert.\ Ansonsten\ passiert\ nichts.\r\n +comment7.params=pVertex +comment7.target=void\ removeVertex(Vertex) +comment7.text=\r\n\ Der\ Auftrag\ entfernt\ den\ Knoten\ pVertex\ aus\ dem\ Graphen\ und\ loescht\ alle\ Kanten,\ die\ mit\ ihm\ inzident\ sind.\r\n\ Ist\ der\ Knoten\ pVertex\ nicht\ im\ Graphen\ enthalten,\ passiert\ nichts.\r\n +comment8.params=pEdge +comment8.target=void\ removeEdge(Edge) +comment8.text=\r\n\ Der\ Auftrag\ entfernt\ die\ Kante\ pEdge\ aus\ dem\ Graphen.\ Ist\ die\ Kante\ pEdge\ nicht\ \r\n\ im\ Graphen\ enthalten,\ passiert\ nichts.\r\n +comment9.params=pMark +comment9.target=void\ setAllVertexMarks(boolean) +comment9.text=\r\n\ Der\ Auftrag\ setzt\ die\ Markierungen\ aller\ Knoten\ des\ Graphen\ auf\ pMark.\r\n +numComments=17 diff --git a/List$ListNode.class b/List$ListNode.class new file mode 100644 index 0000000000000000000000000000000000000000..af1b6080f00dcae5161d6737825299fdbaf267df GIT binary patch literal 1326 zcmb7CYj4s}7=B8jjLU=}!^?CsWn1YcIQ?MamL-P7Xu|Nr2p{}bu)!`^2rWkcl_nAs zKllUuQO4(O3+0lTNWwWi@9nvq^ZU=wUjUxtSqcdprJ>Sq2pPO z_qKaw^*jZI=9T%$tPf15Uk_rZ3R0JL-!Z+(*kVJw5p=Y_j4bBjj`f*+8%^8wTEq9O z$i8tLYup%^u4}mpa!pB9W_h;k`jNAxLFcuF0?qqiyA`t2{7SZHXSQQ|=L&Z8Ahb@i z+98>S&mh;d9ji6@*tN!OvpXQCLUY(N2OV>4%Q+0j1%}i|p&|vP%8cIUR~;Due;W}t*^HVOolKmS{!)0MTAv5%VF#vhGvKt4Jia3Mpq&@ ziIEg2*b9=^4wKsS<#00YS+8udHYI#&@@i;h%W}QfL)S~g=wf#7K$V?8Plc)IYI+?K`TxdWN334nlD3HkRiE1hUC&jiDZICe?K u!mR`{E-0gQjf{Q&1w^;8C}W?3W-<?M$>yX0 literal 0 HcmV?d00001 diff --git a/List.class b/List.class new file mode 100644 index 0000000000000000000000000000000000000000..bd63d48b6376587c43d8d002997a8e5a2662e049 GIT binary patch literal 3387 zcmb7GTWnNS6kTWLcBY+9+v#g41xit{okw51q_mVmr3lQFVoMc_kLhrQ!FFac50rn6 ze;WS;zo9Yl0}?C-6F)H$jqk*m82$0v#OQ}e)V1%qGjpd?P578|&)sLAz0O*DpMB@v z-*-L+@Hn3JA%G_u(1If}Ov`Z8$KgpId^jev<1#xTL(Ge~JZHpwQf9L}7*iH_ODvT(XNt>z#`mys7+=h`7Kqf+AF5JC!IyXJ>g=!GBzn|m%YoZ!J$T?XK?D6&1_|LwrSoQvC$G=u%uA_E zkzBlK^A(+DPa>N&)92`x%%qbEx;6A`Ic0BMR&uA%rEO~xJ7$H?nai0=%#cwqm$M3u z6l1mw)T=jE>Lp|aue=L}KFP$o7?tADJJ%ecvaGOk+);M>Yt@>lH8BfwnPM(!PN$^E z8iehjWRE;%%zPnkN(tuu*obaF+R@?11{u0!*nvm=n8#^99+BAs!hSrB0VYMllqt&Q zXZ#q)0YA>*tRFkY$I!wC)|QGEaE7I(RcU28RfS_M1uFHX>x-sJF_lc4>^#=8mb5i; zLj|R+CQS?2#>Nm}i*fTu=1}P5%!MFFics}VJsj^%oKrB4o9O!@_b5I)!ndKq>I1lB zaLZuaq}`3p9D}H{d<`VffJHPTNz`-LLaSfzM-R60t+&dujc-a4z){fV`4qIK@GZDL zf!A1p;eMY6!-DZxi)lyLrkb!~k+9qOtAnd?QX(?h9M>WkcmD(7^1~xMR-;&ZcolV5 z&>SWgV-+4-FwLadO3Z8U;&rs)4F_I(4I{CX7`dU^$fU1~_MDxc0MWcx(I{xHb)eoP z)LX2Hw;fP{8Yr;?Ugvmy-^gMy34qCN_jatI`8|ns) zP6e+MYlT?vIj~x5Xo;nYmc9!SVni`uV;1>zF?>hlF4`QpkySKEr8{A7qY)pn!tYqH zLA}q0Wdsajh_QRQtFk5s&}+k7lk#LT+wE&PLK8cSK8l(om_Y}VM@j0V9Qp{pGvNq< z<06J+`5HFcwdJ3Q4zR*j(KHa{u!2BT95@X}d1F`5Bh_&Q8yrDoK~~)rZilUo@hPG2 zk>BS$+85;TB|`WLBlsG7@eM}tEe_#3OyheT!w;Cnk2s5;@B)73egDPMV>d5e2u;{U zCEScMg58|C=;yO%q*hkTbf{I?87%J<1@%s?rR>yN%FdFOO)wr{)C=Ez_+8x&Rri!s z#Z3~Eb{L_mAuUK_nAvS!LAOJgTX2hrYqaTMp#i@!#P8JR59a<)a{Y^)NFk+U&C>7nI;Eb{ezlP zFdVTufJ>gdp6(R{SqyHm3N70jkyb8)TL!C@>jDomNl;A)r~o#oR%~U%39An5QJpxT zHsY}A#!C>f6^(efWojqx8xK^Ju?Mi|)e*d8_nnlD$R#r5wf- Rp9VdA{5*oA%v#V2*S~=)CCUH* literal 0 HcmV?d00001 diff --git a/List.ctxt b/List.ctxt new file mode 100644 index 0000000..3bad4ea --- /dev/null +++ b/List.ctxt @@ -0,0 +1,43 @@ +#BlueJ class context +comment0.target=List +comment0.text=\r\n\

\r\n\ Materialien\ zu\ den\ zentralen\ NRW-Abiturpruefungen\ im\ Fach\ Informatik\ ab\ 2018\r\n\

\r\n\

\r\n\ Generische\ Klasse\ List\r\n\

\r\n\

\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\ \r\n\ @author\ Qualitaets-\ und\ UnterstuetzungsAgentur\ -\ Landesinstitut\ fuer\ Schule\r\n\ @version\ Generisch_06\ 2015-10-25\r\n +comment1.params= +comment1.target=List() +comment1.text=\r\n\ Eine\ leere\ Liste\ wird\ erzeugt.\r\n +comment10.params=pContent +comment10.target=void\ append(java.lang.Object) +comment10.text=\r\n\ Falls\ pContent\ gleich\ null\ ist,\ geschieht\ nichts.\r\n\ Ansonsten\ wird\ ein\ neues\ Objekt\ pContent\ am\ Ende\ der\ Liste\ eingefuegt.\r\n\ Das\ aktuelle\ Objekt\ bleibt\ unveraendert.\ \r\n\ Wenn\ die\ Liste\ leer\ ist,\ wird\ das\ Objekt\ pContent\ in\ die\ Liste\ eingefuegt\r\n\ und\ es\ gibt\ weiterhin\ kein\ aktuelles\ Objekt\ (hasAccess()\ \=\=\ false).\r\n\ \r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ das\ anzuhaengende\ Objekt\ vom\ Typ\ ContentType\r\n +comment11.params=pList +comment11.target=void\ concat(List) +comment11.text=\r\n\ Falls\ es\ sich\ bei\ der\ Liste\ und\ pList\ um\ dasselbe\ Objekt\ handelt,\r\n\ pList\ null\ oder\ eine\ leere\ Liste\ ist,\ geschieht\ nichts.\r\n\ Ansonsten\ wird\ die\ Liste\ pList\ an\ die\ aktuelle\ Liste\ angehaengt.\r\n\ Anschliessend\ wird\ pList\ eine\ leere\ Liste.\ Das\ aktuelle\ Objekt\ bleibt\r\n\ unveraendert.\ Insbesondere\ bleibt\ hasAccess\ identisch.\r\n\ \r\n\ @param\ pList\r\n\ \ \ \ \ \ \ \ \ \ \ \ die\ am\ Ende\ anzuhaengende\ Liste\ vom\ Typ\ List\r\n +comment12.params= +comment12.target=void\ remove() +comment12.text=\r\n\ Wenn\ die\ Liste\ leer\ ist\ oder\ es\ kein\ aktuelles\ Objekt\ gibt\ (hasAccess()\r\n\ \=\=\ false),\ geschieht\ nichts.\r\n\ Falls\ es\ ein\ aktuelles\ Objekt\ gibt\ (hasAccess()\ \=\=\ true),\ wird\ das\r\n\ aktuelle\ Objekt\ geloescht\ und\ das\ Objekt\ hinter\ dem\ geloeschten\ Objekt\r\n\ wird\ zum\ aktuellen\ Objekt.\ \r\n\ Wird\ das\ Objekt,\ das\ am\ Ende\ der\ Liste\ steht,\ geloescht,\ gibt\ es\ kein\r\n\ aktuelles\ Objekt\ mehr.\r\n +comment13.params=pNode +comment13.target=List.ListNode\ getPrevious(List.ListNode) +comment13.text=\r\n\ Liefert\ den\ Vorgaengerknoten\ des\ Knotens\ pNode.\ Ist\ die\ Liste\ leer,\ pNode\r\n\ \=\=\ null,\ pNode\ nicht\ in\ der\ Liste\ oder\ pNode\ der\ erste\ Knoten\ der\ Liste,\r\n\ wird\ null\ zurueckgegeben.\r\n\r\n\ @param\ pNode\r\n\ \ \ \ \ \ \ \ \ der\ Knoten,\ dessen\ Vorgaenger\ zurueckgegeben\ werden\ soll\r\n\ @return\ der\ Vorgaenger\ des\ Knotens\ pNode\ oder\ null,\ falls\ die\ Liste\ leer\ ist,\r\n\ \ \ \ \ \ \ \ \ pNode\ \=\=\ null\ ist,\ pNode\ nicht\ in\ der\ Liste\ ist\ oder\ pNode\ der\ erste\ Knoten\r\n\ \ \ \ \ \ \ \ \ der\ Liste\ ist\r\n +comment2.params= +comment2.target=boolean\ isEmpty() +comment2.text=\r\n\ Die\ Anfrage\ liefert\ den\ Wert\ true,\ wenn\ die\ Liste\ keine\ Objekte\ enthaelt,\r\n\ sonst\ liefert\ sie\ den\ Wert\ false.\r\n\ \r\n\ @return\ true,\ wenn\ die\ Liste\ leer\ ist,\ sonst\ false\r\n +comment3.params= +comment3.target=boolean\ hasAccess() +comment3.text=\r\n\ Die\ Anfrage\ liefert\ den\ Wert\ true,\ wenn\ es\ ein\ aktuelles\ Objekt\ gibt,\r\n\ sonst\ liefert\ sie\ den\ Wert\ false.\r\n\ \r\n\ @return\ true,\ falls\ Zugriff\ moeglich,\ sonst\ false\r\n +comment4.params= +comment4.target=void\ next() +comment4.text=\r\n\ Falls\ die\ Liste\ nicht\ leer\ ist,\ es\ ein\ aktuelles\ Objekt\ gibt\ und\ dieses\r\n\ nicht\ das\ letzte\ Objekt\ der\ Liste\ ist,\ wird\ das\ dem\ aktuellen\ Objekt\ in\r\n\ der\ Liste\ folgende\ Objekt\ zum\ aktuellen\ Objekt,\ andernfalls\ gibt\ es\ nach\r\n\ Ausfuehrung\ des\ Auftrags\ kein\ aktuelles\ Objekt,\ d.h.\ hasAccess()\ liefert\r\n\ den\ Wert\ false.\r\n +comment5.params= +comment5.target=void\ toFirst() +comment5.text=\r\n\ Falls\ die\ Liste\ nicht\ leer\ ist,\ wird\ das\ erste\ Objekt\ der\ Liste\ aktuelles\r\n\ Objekt.\ Ist\ die\ Liste\ leer,\ geschieht\ nichts.\r\n +comment6.params= +comment6.target=void\ toLast() +comment6.text=\r\n\ Falls\ die\ Liste\ nicht\ leer\ ist,\ wird\ das\ letzte\ Objekt\ der\ Liste\r\n\ aktuelles\ Objekt.\ Ist\ die\ Liste\ leer,\ geschieht\ nichts.\r\n +comment7.params= +comment7.target=java.lang.Object\ getContent() +comment7.text=\r\n\ Falls\ es\ ein\ aktuelles\ Objekt\ gibt\ (hasAccess()\ \=\=\ true),\ wird\ das\r\n\ aktuelle\ Objekt\ zurueckgegeben,\ andernfalls\ (hasAccess()\ \=\=\ false)\ gibt\r\n\ die\ Anfrage\ den\ Wert\ null\ zurueck.\r\n\ \r\n\ @return\ das\ aktuelle\ Objekt\ (vom\ Typ\ ContentType)\ oder\ null,\ wenn\ es\r\n\ \ \ \ \ \ \ \ \ kein\ aktuelles\ Objekt\ gibt\r\n +comment8.params=pContent +comment8.target=void\ setContent(java.lang.Object) +comment8.text=\r\n\ Falls\ es\ ein\ aktuelles\ Objekt\ gibt\ (hasAccess()\ \=\=\ true)\ und\ pContent\r\n\ ungleich\ null\ ist,\ wird\ das\ aktuelle\ Objekt\ durch\ pContent\ ersetzt.\ Sonst\r\n\ geschieht\ nichts.\r\n\ \r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ das\ zu\ schreibende\ Objekt\ vom\ Typ\ ContentType\r\n +comment9.params=pContent +comment9.target=void\ insert(java.lang.Object) +comment9.text=\r\n\ Falls\ es\ ein\ aktuelles\ Objekt\ gibt\ (hasAccess()\ \=\=\ true),\ wird\ ein\ neues\r\n\ Objekt\ vor\ dem\ aktuellen\ Objekt\ in\ die\ Liste\ eingefuegt.\ Das\ aktuelle\r\n\ Objekt\ bleibt\ unveraendert.\ \r\n\ Wenn\ die\ Liste\ leer\ ist,\ wird\ pContent\ in\ die\ Liste\ eingefuegt\ und\ es\r\n\ gibt\ weiterhin\ kein\ aktuelles\ Objekt\ (hasAccess()\ \=\=\ false).\ \r\n\ Falls\ es\ kein\ aktuelles\ Objekt\ gibt\ (hasAccess()\ \=\=\ false)\ und\ die\ Liste\r\n\ nicht\ leer\ ist\ oder\ pContent\ gleich\ null\ ist,\ geschieht\ nichts.\r\n\ \r\n\ @param\ pContent\r\n\ \ \ \ \ \ \ \ \ \ \ \ das\ einzufuegende\ Objekt\ vom\ Typ\ ContentType\r\n +numComments=14 diff --git a/Queue$QueueNode.class b/Queue$QueueNode.class new file mode 100644 index 0000000000000000000000000000000000000000..70cf8e76aaa606f96c472401979f476584676436 GIT binary patch literal 1192 zcmb7CU2hUW6g|VoF5p%uMYOeIOHr3?3-v`GY-&ssqY1&75*~b8aDv<5LfFOVtG`GS z8xtS=0sbiCncZdiX!{@uJ9qB6bI!SU=Fi_>zX3eO<1Ess=b*t-(Z2c|=s48T5YYQ0 z*O#s@P;8yspX}z)b_dNjy>r?3p9y5ooPlfm(}@&V>zszQoiAfaEaS@0etYzuQ13ONn^1@^FKIV?T7}$TAtF59oO+s1h&m6 zciC~hE08)3Jmp)CE8EkLJvr&vy&+u|Tcf@`?AjAY?W1H$39*@R)SN(hxs1(5r3G`z zu+q{!>9;usfl_2@p;1+k9*6K=1Yh5CKsT7tZJ6~d23MVBucr~nktA-W#1mKCYu>Cc z^}L5qcmY)A=W9LRZUJJ zC=y7T^)7b!1~tCUBoc}Td_vqMkmH|}@jhQDC`Do^=8D)LUgGX6*Cf}9wSNI&{Y1hN z7f7m4$~u@u-&v8wEq=EGwOy**A^RqIs*Lt<4>gpDm&r#q+$O4i6`~pDHW|;ce2gid zq2n$3x{Gb@m9KYP6_ciXrRMso9ynyzjRid|*3;-jbv@TpSg5D4d_0i~qx+m+sP}?9 zLFTme1F3He!gjSF`6Q4s!h%Rj3CuG}AZ%loRaFk;GHr5|_W6I%)@bMfMG|<3N5N`h Njcbl_X_&N<_y@1u*e3u0 literal 0 HcmV?d00001 diff --git a/Queue.class b/Queue.class new file mode 100644 index 0000000000000000000000000000000000000000..99c3d008be93df58fc9e8092f65e26c7cbaa6f63 GIT binary patch literal 1541 zcmZuxTTc@~6#k~&vb5b&K)|~KqLu~0`wc`BqKOGq4Md|4CJPL(Shv`26-;>7_zUz8 z_~L^miisvBzG&i4GRF9w*+p7wn$FHSbLM=Pv+a-HpS}P%hszmcF_K0Gqp}>gaUuf? zCo>FA$?mi)XJk2Rv;@2Z63kmb_|JR~4*f?JX#DOqr5_zlCGG zHRCS@URbN}R&R7ZK08?sLLG#&>#KTfVx+#@3O&E1&@%1^emJ3!EDYXe|4Dbf&G0<-1buwpv;0LQ_@NGvkcm1N zQ&L@=;+}H3cC+FR&lR6}_al_6J|H1W@*Pu2^lL5H05LUR~Q5j-RAbG|As>aaSRuq0E5 gm5${PvQ=b+iy<~nU>L^?0RKCY<1RxM7FP#}KmEcLs{jB1 literal 0 HcmV?d00001 diff --git a/Queue.ctxt b/Queue.ctxt new file mode 100644 index 0000000..d277cda --- /dev/null +++ b/Queue.ctxt @@ -0,0 +1,19 @@ +#BlueJ class context +comment0.target=Queue +comment0.text=\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\

\r\n\

\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 0000000000000000000000000000000000000000..85da5aeda888019ab28e887415541175051b650e GIT binary patch literal 688 zcmZXRUrQT76vfZ%-?&*Djj>i^>z`IgR%m=`A1ZliDF|uv5DC<`O&sEAOk}f4KU5zq zGzb;?0s5gz&&)1C<1XBpJ9F;2zq|YQ-|s&F-eWI-kCzMZ@Jfd*AKL*O?D*LA@mj!A zrvl~Hd3+N$hVf|7=%k4n4L%4smvM3-AWj6lLp4%qQ((3BR9Wv*`*D0K1xhV7l3%Yc zdonqWdqbX-TjPE_?8b@Gd4A}mXKEr)Xmw?h%J1xDUmblCa0fEgYo%6y+D5>i$n=Y0 za%v~Kt9zBD1vSwd$w};5oxDM3e4X^=XQdH}S(mqZ#1J9ggeYJkM1Z2e(){3BvB-(D zqDO*u?_Bm%)1!+WeoUWV*y2k&v!f$d2SR%=K4aE43ZN9-K}7pgSdl%2{nHeb7|SdG z))_ZwQ)SU6mU!}7ZXqUs~A!1S-fMf8BjoAG#f!ErUuI?1zP8zu)_ve-Z7Kn@;&xHFKd HQEmPQ>!xQZ literal 0 HcmV?d00001 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