From a92e51a97bfcdb52cc09c034c7ea29260515e450 Mon Sep 17 00:00:00 2001 From: Asecave Date: Tue, 19 Jan 2021 18:33:11 +0100 Subject: [PATCH] Breitensuche geht --- Breitensuche.class | Bin 0 -> 3660 bytes Breitensuche.ctxt | 20 +++ Breitensuche.java | 293 +++++++++++++++++++++++------------------ BreitensucheTest.class | Bin 0 -> 1106 bytes BreitensucheTest.ctxt | 7 + 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 | 113 +++++++++++----- 18 files changed, 420 insertions(+), 165 deletions(-) create mode 100644 Breitensuche.class create mode 100644 Breitensuche.ctxt create mode 100644 BreitensucheTest.class create mode 100644 BreitensucheTest.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..3f4fa8f961b2cfa8807ed168116e6a9321c55643 GIT binary patch literal 3660 zcmbVP>vt4q8UM{*W;UA%xezFeQm(~KNVpVAZ9*~RR%kaA8l)t}%Vc+w4B4I8%;SFNvtFRuRRP-Zom=T1AiN_^E#AS3h|C6a3I~ti|6mv$Jd{ekoz!dFS^& z*WdFzZ#IAXXD*(S@vrTpS@}>u?8b4NeUCIHH&q(2b!GLotR@3^Or2sNuNU zbA-zL7snFJiqJRIo`Vm2klM4;dqV9w+EYP}2FQ4T-0dTxdP2iD<5+{NynIWRhvIku z-kmcltOWk7hUYXquRxhlpr!6|jr?S{0(F;VTgBZ9!pXM73L5$O}kJ^Pnt9uo^q%XOC2`dqIsM^BvUde z7|uAZg3y@7?W8>;TSq~B+_E#isDfq5)G=em*pfBui7mrL*Rm(N+eR6+&Ce8tZPS{V z9CJ!8?Ww7hRVdPaUEbH<*DsNN%7B9Uf@!$v$%7@c#K^Riw~m~2!ScmP z&gO$en>ucOy2Xk&_8cE(xzgsKC5_Zv+bf%;R66bi8!+m%q>gUvqLZK>qW4@W zXKfLg(=m@9v6TH+-YFE!EPH93P1f(Y#av0MSl4TrS#z8xg!dY@?aY{LH?`MEPnL3Q z!hy_$DVEOZ_%VK>u}n@CP05%h@0C zCmmPtX9apKB?_9Z_3yo7$ILYQBO)#Fe};ooTW4gd15{tFh|F_q^(`oHzrY$5gbk`D zQ?lt6w7Fmw_hhp^^+Sd`#TJVsN9Cxl+B^zAf1?o%%(FffQNKlF$+lof<2>kdY~B-0 zrIq;gd2*^Wh9I7~Gwo@AS{GdjJ|kYZnpGIc<%_eN;-p*=(Q%j7shKe=nl(%g&lZX% zn;`6zgh=1FYy6#x!ztA7zL#q>H1gTtf<$dJ!+yqQAV@$nt_x>Db7UwHt=a z5F2QJf6WEP`S#iFuCk;Rok7c$YS&E~g*|BwIt|9Gg3w~JwIjB9oTs(9dDkSvOFOx| z;hKk>eG|6hnteur6khvGg4=?0_hT)8d3N#l z8ZU7fS?*NsImukVMEI}J_yeV(eE~}QWrRi+5Pl1h%ZQG&s0+M<+uuZFQyDQ2sUtEZ zNJoIgiR>4oGeGKzbVUS8L;_3~Eb3v=0BaCT^)Qu~Y%XKT$fnL#G%ldIjFtfEAhdKb z)R|CQv1~Dxh$Nz|xaoS3%8Bc-j#hl`I!qlsb-;IEhs_i<@~zt>)#j1|LxKUs#8auwK!z0efh9 zuTMUD(Z{z0{*8XxQ)vI6800QQ4fchcd~{@I?k2@dzIyfj}q2-%P5vl9F4IB-NX78+P!kVK@7^pB=rIy*$h=KFTi6 zP;;CFPV;1jWIRObPEq0vNqUa-oFg$WVF)i{KZ`Ny5q}>&oTBw1%4^j7I?sgAY5KaC zRI5T?r7W^Li2F!x6Xxjk5a~_O`j@E@W^^ZUn7at>r_OSo`8JNwhA%%tY?NmkpnifK z8rEot^8d%!=BYIOx-C$cN~vf~`;E0~CFo4@)YAEHU=wUv{q^lfuc&m&HlefJMOc6MB%Q@`P!zHGtAFQ1Yzak`6H-KbWTZk7VWEhRot@Vx z>f+xg;FqrmCrQ44t>iS_%-Oh;U%m$T-7AGxnD(no_7bM}&CA9cDDg|zEXp2DJ2+oV zrApHYPOV&af(cpCurrentVertex\ 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 - 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) { + g.setAllVertexMarks(false); // Markierungen zurücksetzen + Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen - // 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; - } + Vertex end = g.getVertex(pVertexID); - /** - * - * @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 + Vertex start = g.getVertices().getContent(); + start.setMark(true); - // 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; - } + searchQueue.enqueue(start); - public boolean findVertexByWeight( String pVertexID ) { - g.setAllVertexMarks(false); // Markierungen zurücksetzen - Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + while (!searchQueue.isEmpty()) { - // 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; - } + Vertex k = searchQueue.front(); + searchQueue.dequeue(); + + System.out.println(k.getID()); + if (k.equals(end)) { + System.out.println("Found!"); + return true; + } - /** - * 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(); + List neighbours = g.getNeighbours(k); + neighbours.toFirst(); + while (neighbours.hasAccess()) { + Vertex n = neighbours.getContent(); - if( pVertices.hasAccess() && - pVertices.getContent().getID().compareToIgnoreCase(v.getID()) < 0 ) { - v = pVertices.getContent(); - } - } while( pVertices.hasAccess() ); + if (!n.isMarked()) { + n.setMark(true); + searchQueue.enqueue(n); + } + neighbours.next(); + } + } - pVertices.toFirst(); - while( pVertices.hasAccess() ) { - if( pVertices.getContent().getID().equals(v.getID()) ) { - break; - } - pVertices.next(); - } - pVertices.remove(); - return v; - } + // 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; + } - /** - * 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(); + /** + * + * @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 - if( pVertices.hasAccess() && - g.getEdge(pCurrentVertex, pVertices.getContent()).getWeight() < weight ) { - v = pVertices.getContent(); - } - } while( pVertices.hasAccess() ); + // 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; + } - pVertices.toFirst(); - while( pVertices.hasAccess() ) { - if( pVertices.getContent().getID().equals(v.getID()) ) { - break; - } - pVertices.next(); - } - pVertices.remove(); - return v; - } + public boolean findVertexByWeight(String pVertexID) { + g.setAllVertexMarks(false); // Markierungen zurücksetzen + Queue searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen + + // 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; + } + + /** + * 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(); + + 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 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; + } } diff --git a/BreitensucheTest.class b/BreitensucheTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7a0423f6dfddfbb7396f9da2d30e261071464e18 GIT binary patch literal 1106 zcmaJ=T~pIQ6g^v@T}lKDg5n2O@q-d=K~Yp3h3en~9i5Td8F>rsLKo9rCfP9l2>*;P z;OLAmzWJjZ@1~JPM#;nG?#VfK&%Jl^^Viq!0G6>*gp1h%ZWNKjEXPfbTQ9ge#k6^^Qf7dRFmnR#xO8fZZZtM&~3pmR+mb=j=S3;Z1~#& zA#Po_{GjQF((Y4m&~#*Eztut^jZjhC>WGGj%nHL$B+R>ghUvGlGO{b0GLocRQ%W1( zNUai~4tJ}2F*&H##EuRH2}cbjSeL5Z6rm9x8FGfGqko-2wDEdhn;u!*)N$An>(UyY zJn5;j=O6eECUB0y$$n&*e<{M!1{o8owDIFGP$e0elI)gVh5mkrzylq2eAO1JLWLy^ z2M_SDfMo}d@R*^J$xxFb5IZ7hpO$6#n8n~_#k$pryQeAhwS>a3kdZa?2dNX4lC94F zy(c^ePps#~jJ~c_TldO7H9@{dr1ob!X!}o)ZE!X4)o%68_MT`FRNTqTadNKSXKb2K zs@;|H7U}wfT#F(aI_dl*XoN9Ma_S$tEqhr@`)Vf z2wVMz-1{R8)ZIbP9Xdq*3kojx+~G7VdhSRXI-Ywb2}j*A&mHfDeGfAzP`)v6s(FH{ no}sl&hL@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..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