forked from IF-LK-2020/breitensuche
findVertexByWeight() Erster nachbarknoten der besucht wird, ist immer der mit geringstem gewicht implementiert
This commit is contained in:
Binary file not shown.
@@ -6,15 +6,17 @@ comment1.target=Breitensuche()
|
|||||||
comment2.params=pVertexID
|
comment2.params=pVertexID
|
||||||
comment2.target=boolean\ findVertex(java.lang.String)
|
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
|
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.params=list
|
||||||
comment3.target=boolean\ findVertexByID(java.lang.String)
|
comment3.target=List\ copyList(List)
|
||||||
comment3.text=\r\n\r\n\ @param\ pVertexID\r\n\ @return\r\n
|
|
||||||
comment4.params=pVertexID
|
comment4.params=pVertexID
|
||||||
comment4.target=boolean\ findVertexByWeight(java.lang.String)
|
comment4.target=boolean\ findVertexByID(java.lang.String)
|
||||||
comment5.params=pVertices
|
comment4.text=\r\n\r\n\ @param\ pVertexID\r\n\ @return\r\n
|
||||||
comment5.target=Vertex\ getVertexFromListByID(List)
|
comment5.params=pVertexID
|
||||||
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
|
comment5.target=boolean\ findVertexByWeight(java.lang.String)
|
||||||
comment6.params=pCurrentVertex\ pVertices
|
comment6.params=pVertices
|
||||||
comment6.target=Vertex\ getVertexFromListByWeight(Vertex,\ List)
|
comment6.target=Vertex\ getVertexFromListByID(List)
|
||||||
comment6.text=\r\n\ Sucht\ aus\ einer\ Liste\ von\ Knoten\ denjenigen,\ dessen\ Kantengewicht\ zum\r\n\ Konten\ <code>pCurrentVertex</code>\ 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
|
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
|
||||||
numComments=7
|
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\ <code>pCurrentVertex</code>\ 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
|
||||||
|
|||||||
@@ -84,6 +84,16 @@ public class Breitensuche {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Vertex> copyList(List<Vertex>list){
|
||||||
|
list.toFirst();
|
||||||
|
List<Vertex> copy = new List<Vertex>();
|
||||||
|
while(list.hasAccess()){
|
||||||
|
copy.append(list.getContent());
|
||||||
|
list.next();
|
||||||
|
}
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param pVertexID
|
* @param pVertexID
|
||||||
@@ -99,6 +109,7 @@ public class Breitensuche {
|
|||||||
// Nutze dazu die Hilfsmethode getVertexFromListByID, um aus
|
// Nutze dazu die Hilfsmethode getVertexFromListByID, um aus
|
||||||
// Liste der Nachbarknoten denjenigen, der alphabetisch als
|
// Liste der Nachbarknoten denjenigen, der alphabetisch als
|
||||||
// erstes kommt herauszusuchen.
|
// erstes kommt herauszusuchen.
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,12 +117,39 @@ public class Breitensuche {
|
|||||||
g.setAllVertexMarks(false); // Markierungen zurücksetzen
|
g.setAllVertexMarks(false); // Markierungen zurücksetzen
|
||||||
Queue<Vertex> searchQueue = new Queue<>(); // Speicher für zu bearbeitende Knoten erstellen
|
Queue<Vertex> 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
|
// werden, dass der Nachbarknoten mit der Kante mit dem geringsten
|
||||||
// Gewicht zuerst besucht wird.
|
// Gewicht zuerst besucht wird.
|
||||||
// Nutze dazu die Hilfsmethode getVertexFromListByWeight, um aus
|
// Nutze dazu die Hilfsmethode getVertexFromListByWeight, um aus
|
||||||
// Liste der Nachbarknoten denjenigen mit dem geringsten Gewicht
|
// Liste der Nachbarknoten denjenigen mit dem geringsten Gewicht
|
||||||
// herauszusuchen.
|
// 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<Vertex> 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -4,4 +4,6 @@ comment1.params=
|
|||||||
comment1.target=void\ setUp()
|
comment1.target=void\ setUp()
|
||||||
comment2.params=
|
comment2.params=
|
||||||
comment2.target=void\ testFindVertex()
|
comment2.target=void\ testFindVertex()
|
||||||
numComments=3
|
comment3.params=
|
||||||
|
comment3.target=void\ testFindVertexByWeight()
|
||||||
|
numComments=4
|
||||||
|
|||||||
@@ -21,5 +21,17 @@ public class BreitensucheTest {
|
|||||||
assertFalse("Der Knoten Tokio ist nicht im Graphen vorhanden.", ts.findVertex("Tokio"));
|
assertFalse("Der Knoten Tokio ist nicht im Graphen vorhanden.", ts.findVertex("Tokio"));
|
||||||
assertFalse("Der Knoten London ist nicht im Graphen vorhanden.", ts.findVertex("London"));
|
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"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class List<ContentType> {
|
|||||||
current = current.getNextNode();
|
current = current.getNextNode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles
|
* Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles
|
||||||
* Objekt. Ist die Liste leer, geschieht nichts.
|
* Objekt. Ist die Liste leer, geschieht nichts.
|
||||||
@@ -342,4 +342,5 @@ public class List<ContentType> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user