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 {
}
}
+
}