From 28ec0827ccdee2a1686233be96327634dae17f8d Mon Sep 17 00:00:00 2001 From: "artem.didytschuk" Date: Mon, 18 Jan 2021 15:35:11 +0100 Subject: [PATCH] findVertexByWeight() Erster nachbarknoten der besucht wird, ist immer der mit geringstem gewicht implementiert --- Breitensuche.class | Bin 4124 -> 4801 bytes Breitensuche.ctxt | 24 +++++++++++++----------- Breitensuche.java | 40 +++++++++++++++++++++++++++++++++++++++- BreitensucheTest.class | Bin 1106 -> 1328 bytes BreitensucheTest.ctxt | 4 +++- BreitensucheTest.java | 12 ++++++++++++ List.java | 3 ++- 7 files changed, 69 insertions(+), 14 deletions(-) diff --git a/Breitensuche.class b/Breitensuche.class index baa7186363fece854654ce38497db4e70f2a6c21..df8012461eef5a8e874e55f6c73d377f7de4a6f8 100644 GIT binary patch delta 2033 zcmYjRYgiOj7=CA%-5JIM`ruOuJ{qQkvXGUL3c4w1R)R^I3TC#-3X}n|Kq}>$_j}rC ziP_Z)YGeqq5~gTgGQ8lW(#q`ev;NkP60`Tr;JW+coNvGL&Ubmw`0Dr7p@A9$uN!#7z#<(%_o!+7m_HM-SS&$r zZpzCDF43{nL?QyxvrGn9Zej&iMq?FL8(3pvE!Ii*dWqT~m$&4yQQ|k5NXOf9vE;H@ z;nuG!af1ddHs#%`Fwk zLY=@K?6n%AvIb{ipTMW67x)bOiOH+-SNR1#M}xotH0o#)IEZE)A%R0^vHEE}gI@@= z${2^SU*Jm|5jcuAfnzu>@D)x7oJ6+3Dd{^ceP5$ZL65AmvdTau3(NIa7MB$Uy1Q}4 zz&8TzI4f{YesUh!1}=~rNtHl{3_Sxc3cP~30vB;f;4-pJfh+h{;5&S8)oBBoE^B`) zQCD%zYIj%bZeMx1zqHWu>gDbqWbB`{&B^j`4s zuZmfO%xi}U6v03-IhYrbJ1(3%F3g`A!JlBX9*jDbm8-N1oyffJbBrmw z>#(kyxxwnx5Im$|LQ2X(XlWtv|F8@#UL#|2AyqjkwlzG%6;HMv-iBd~NRnp%5R&bk z1P&mjcigRb1mKxgAMav_fvFNSsP1+nV-Kmjy_z^rE44vPFgdE8wK%NLp$35}c3aKb z7ok6b)Z${KVF@y@lpQal@|IIAE7;FUl<+;Aht*Wo8Y0$WJ=UR?>t1Z&>~G|tZ{l!o z=2UOtD8GZ_*veU~wORC%gM}Cwgx{9(6cX%+w2*f-r%R+AVUjz-B)3J7EbrIBJ0g{5 zcSL%Bgh=~2BJIRz8vml3DwV3D2*nz=G1iWlAxegIHO3pvj1XZ4uOHY&a&}W#dq~MX z^kQQk)ME(tladBL*as-sM#{8_s%oZy4l!&?giuPtJ(Q3zN2D|CUY$XcLIF=oq(%qW z(iCvn(sVs&_HlQq^JNyw=gKa(B{oqT5yD98dTejUxEVV-n3;BWe!S?;peI@SDVBbk z6MKg9)6UY*@=ZC%k}vRGxyV=J5-GdP$X8Ixm#+#}u>jZX^5xqB)P&2g!K=I~S!|8n zh|0)iU6+;spN|2`m{2|*PEQhcXWC-mx`hO?AC+>qr*clhJi=8};5v7c(SO7ZzC-a; Pi<~|c@6xx`Ubp`bsDq3u delta 1399 zcmbW1TU1nK6vuyOZs&0NK;WSg7p|$SRhhk5kR&5grYQ!bAXKJP48y1m1T%(WjT)MH z$?#-XQ}UL1Nr|MQw9IbWO?&OF*Irw#T4AfbX9#`hsab3G+27v(z4w3bZ=ZAK#$Dn1 z^M4PY2Fm%#rGhq_go}^1Jf^YCX1T)(mmp85G3n6m(Bbf;L#IQRO)6B?B*F4?DIl$& zm3{RUnWt>JUBa}fWtApa?b5@VJf7wmhm6Zw)~R{DqMlXJt73!VH@Y$!F zVyW?h9=9v*#bPWy_OL^3o`$`o6n5IYY-7DLc)hjI^4q-XUG&}T+5U1jZ$ToSjHc3^ zF>ktmcyc8Xi{R|eXh)mjZl+s=8e^TQShrZ`ogG?{G*t4M;dS2dt_xIWD%oXtlih|r z^b4jw9ZSayZ?V^~kNq|W3|weZ+u8VRd_Zsw>r57VVfHOSQGPbd3u!?C`PS6HXaUYs{xa z96mFg;d8@TwS2*shOhYAyFEB55U5FX4b}$#u>9X}&YNqm^v>DI(0R@9gIDR?VqNg! z&PnT{SDIHdVVW!fGF+byMYNFUGAofY27B`+T2_^}&t0-;rnu%{3o@T-?vc}Ye&b$d z32-vMaGz*C3B15;(frhLO7OD?&?4ixU$h|I>}0NJT4EkGTEc6-YD6kDns`Pl+##q& zdYPZiv6R(3K&|9}Uq`E|R!6vOuaX6#v!o%;6gZpYt_}ZISp&ut%6;6CQtw zQk$Sn(_hqGWB-|D(mcxK_xu|gssvpi>|rquk4m0alvg-wD<0!eJjTIy1qYL5r53Gh z@z8%}UM88BOXjZso!Q63JR%ilcykJ;T6cPD3L}}a+fE42097I@qzA~zX)T8JQmdD1 z*&z3{k*RDF|7N-1Ei&V+G_y@|ZRc_Nh_mAgPKmK@6Eclj>Bq=ZZzeZ!?H1J6fHf&Q zXhU!WBNM*KEe*-|5a<&5FD06#ySOMEC?Dc3Z(Y%ZoYG%3GgCI@GW7`KBx<)%-y`Mv zpCurrentVertex\ am\ geringsten\ ist.\ Der\ Knoten\ wird\r\n\ aus\ der\ Liste\ gel\u00F6scht\ und\ dann\ zur\u00FCck\r\n\ gegeben.\r\n\ @param\ pVertices\r\n\ @return\r\n -numComments=7 +comment4.target=boolean\ findVertexByID(java.lang.String) +comment4.text=\r\n\r\n\ @param\ pVertexID\r\n\ @return\r\n +comment5.params=pVertexID +comment5.target=boolean\ findVertexByWeight(java.lang.String) +comment6.params=pVertices +comment6.target=Vertex\ getVertexFromListByID(List) +comment6.text=\r\n\ Sucht\ aus\ einer\ Liste\ von\ Knoten\ denjenigen,\ dessen\ ID\ alphabetisch\ ale\r\n\ erstes\ kommt.\ Der\ Knoten\ wird\ aus\ der\ Liste\ gel\u00F6scht\ und\ dann\ zur\u00FCck\r\n\ gegeben.\r\n\ @param\ pVertices\r\n\ @return\r\n +comment7.params=pCurrentVertex\ pVertices +comment7.target=Vertex\ getVertexFromListByWeight(Vertex,\ List) +comment7.text=\r\n\ Sucht\ aus\ einer\ Liste\ von\ Knoten\ denjenigen,\ dessen\ Kantengewicht\ zum\r\n\ Konten\ pCurrentVertex\ am\ geringsten\ ist.\ Der\ Knoten\ wird\r\n\ aus\ der\ Liste\ gel\u00F6scht\ und\ dann\ zur\u00FCck\r\n\ gegeben.\r\n\ @param\ pVertices\r\n\ @return\r\n +numComments=8 diff --git a/Breitensuche.java b/Breitensuche.java index ad4f1d4..8a2d8f1 100644 --- a/Breitensuche.java +++ b/Breitensuche.java @@ -84,6 +84,16 @@ public class Breitensuche { return false; } + public List copyList(Listlist){ + list.toFirst(); + List copy = new List(); + while(list.hasAccess()){ + copy.append(list.getContent()); + list.next(); + } + return copy; + } + /** * * @param pVertexID @@ -99,6 +109,7 @@ public class Breitensuche { // Nutze dazu die Hilfsmethode getVertexFromListByID, um aus // Liste der Nachbarknoten denjenigen, der alphabetisch als // erstes kommt herauszusuchen. + return false; } @@ -106,12 +117,39 @@ public class Breitensuche { 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 + // Finished: Ä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. + if(g.getVertex("Köln").getID().equals(pVertexID)){ + System.out.println("Köln gefunden"); + return true; + } else { + g.getVertex("Köln").setMark(true); + searchQueue.enqueue(g.getVertex("Köln")); + while(!searchQueue.isEmpty()){ + Vertex v = searchQueue.front(); + List cngbrs=copyList(g.getNeighbours(v)); + cngbrs.toFirst(); + while(cngbrs.hasAccess()){ + Vertex vs = getVertexFromListByWeight(v,cngbrs); + if(!vs.isMarked()){ + System.out.println(vs.getID()); + if(vs.getID().equals(pVertexID)){ + System.out.println(vs.getID() +" gefunden"); + return true; + } + vs.setMark(true); + searchQueue.enqueue(vs); + } + + } + searchQueue.dequeue(); + } + } + System.out.println(pVertexID +" Nicht gefunden"); return false; } diff --git a/BreitensucheTest.class b/BreitensucheTest.class index 7a0423f6dfddfbb7396f9da2d30e261071464e18..e365be3384282608006c98787a9a54c375b3950d 100644 GIT binary patch delta 537 zcmaiw&oTo+5XQgR6+1TT-(Z7CB8iA(NraFDk(4SqxF{E1z# z@Bj`D9w?=EvPhMK*{bfZyZZNS&wTPn{qVi}`UaqcnvMyiG%V^+km5*lEO|1cBMXaT znPY_`$C2k)uT%pDc2RNfl=~KgIQ!#)I0UWfodGbA8%2|)#1 z?W)Ow_b-#2fx1s{lo7)`IexQo$tHf-aBKVpn&6fgdV-X?C4#;*EHNzQh#0lRSWo`0 k8iht~VQ@s~X`=MSkfDbvB7qu`@&^CzW5|V)6csFd0eM?K*Z=?k delta 340 zcmZ9HIZgvX5Jg}07*A>Jgl$;NW(Kp^fHBLMMMy*hB;0_6gOHO!pMe-0ArWu@0s;;M zRJTDwwA5AgzxvfzKV=_!@%H)h3iLV27^6s8$#4`(OIZ!$TE;pXN?YkDo6455t#pIE zqx6*Bl)aSwyUTZ9N-G&>!e7aG?SL|+U+0h`|0sjx*!s0Q^$+g;h9;vH7fym;h}B6` zUF%|fr2UKxY;fdOtI@17WpjP_fN5q-39|;f2zR13?>|`k14;k`*{~b-&P8f|xW(UA j8vZLOCHG~e=!Lx8w!_&^p4xvFSTydJUy6Lws$=;ZL7pF| diff --git a/BreitensucheTest.ctxt b/BreitensucheTest.ctxt index 8f13427..6493023 100644 --- a/BreitensucheTest.ctxt +++ b/BreitensucheTest.ctxt @@ -4,4 +4,6 @@ comment1.params= comment1.target=void\ setUp() comment2.params= comment2.target=void\ testFindVertex() -numComments=3 +comment3.params= +comment3.target=void\ testFindVertexByWeight() +numComments=4 diff --git a/BreitensucheTest.java b/BreitensucheTest.java index e073d5a..2c4c448 100644 --- a/BreitensucheTest.java +++ b/BreitensucheTest.java @@ -21,5 +21,17 @@ public class BreitensucheTest { assertFalse("Der Knoten Tokio ist nicht im Graphen vorhanden.", ts.findVertex("Tokio")); assertFalse("Der Knoten London ist nicht im Graphen vorhanden.", ts.findVertex("London")); } + + @Test + public void testFindVertexByWeight() { + Breitensuche ts = new Breitensuche(); + + assertTrue("Der Knoten Köln ist im Graphen vorhanden.", ts.findVertexByWeight("Köln")); + assertTrue("Der Knoten Bielefeld ist im Graphen vorhanden.", ts.findVertexByWeight("Bielefeld")); + assertTrue("Der Knoten Bochum ist im Graphen vorhanden.", ts.findVertexByWeight("Bochum")); + + assertFalse("Der Knoten Tokio ist nicht im Graphen vorhanden.", ts.findVertexByWeight("Tokio")); + assertFalse("Der Knoten London ist nicht im Graphen vorhanden.", ts.findVertexByWeight("London")); + } } diff --git a/List.java b/List.java index 8c82b92..99ad75f 100644 --- a/List.java +++ b/List.java @@ -133,7 +133,7 @@ public class List { current = current.getNextNode(); } } - + /** * Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles * Objekt. Ist die Liste leer, geschieht nichts. @@ -342,4 +342,5 @@ public class List { } } + }