diff --git a/Breitensuche.class b/Breitensuche.class index baa7186..df80124 100644 Binary files a/Breitensuche.class and b/Breitensuche.class differ diff --git a/Breitensuche.ctxt b/Breitensuche.ctxt index cbf9944..8bcdbb6 100644 --- a/Breitensuche.ctxt +++ b/Breitensuche.ctxt @@ -6,15 +6,17 @@ comment1.target=Breitensuche() comment2.params=pVertexID comment2.target=boolean\ findVertex(java.lang.String) comment2.text=\r\n\ Suche\ nach\ einem\ Vertex\ mit\ der\ angegebenen\ ID\ mittels\ der\ Breitensuche.\r\n\ @param\ pVertexID\r\n\ @return\r\n -comment3.params=pVertexID -comment3.target=boolean\ findVertexByID(java.lang.String) -comment3.text=\r\n\r\n\ @param\ pVertexID\r\n\ @return\r\n +comment3.params=list +comment3.target=List\ copyList(List) comment4.params=pVertexID -comment4.target=boolean\ findVertexByWeight(java.lang.String) -comment5.params=pVertices -comment5.target=Vertex\ getVertexFromListByID(List) -comment5.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 -comment6.params=pCurrentVertex\ pVertices -comment6.target=Vertex\ getVertexFromListByWeight(Vertex,\ List) -comment6.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=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 7a0423f..e365be3 100644 Binary files a/BreitensucheTest.class and b/BreitensucheTest.class differ 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 { } } + }