Hallo,
wir haben die Methode breitensucheVonBis(start, ziel) gemeinsam entwickelt, die von einem bestimmten Startknoten mit der Breitensuche bis zu einem bestimmten Zielknoten geht.
Von diesem Code aufbauend (in der Schule zusammen gemacht), soll nun von einem Startknoten wieder mit der Breitensuche ein nächster erreichbarer Knoten gefunden werden, der zum ersten Mal eine bestimmte Eigenschaft besitzt, hier: beim Knoten soll Glasfaser verfügbar sein.
Die Bedingungen haben wir geändert, aber leider hört die Methode breitensucheAusfuehrenBisGlasfaser(start) nicht bei dem Knoten auf, an dem Glasfaser mit true gesetzt ist.
Der Zielindex ist ja von Beginn an noch nicht bekannt wie bei der Methode breitensucheVonBis(start, ziel). Daher: wie kann ich die Breitensuche dann abbrechen, wenn der erste Knoten mit Glasfaser erreicht wurde?
Kann bitte jemand weiterhelfen?
Von diesem Code sollen wir ausgehen:
Hier der abgeänderte Code:
wir haben die Methode breitensucheVonBis(start, ziel) gemeinsam entwickelt, die von einem bestimmten Startknoten mit der Breitensuche bis zu einem bestimmten Zielknoten geht.
Von diesem Code aufbauend (in der Schule zusammen gemacht), soll nun von einem Startknoten wieder mit der Breitensuche ein nächster erreichbarer Knoten gefunden werden, der zum ersten Mal eine bestimmte Eigenschaft besitzt, hier: beim Knoten soll Glasfaser verfügbar sein.
Die Bedingungen haben wir geändert, aber leider hört die Methode breitensucheAusfuehrenBisGlasfaser(start) nicht bei dem Knoten auf, an dem Glasfaser mit true gesetzt ist.
Der Zielindex ist ja von Beginn an noch nicht bekannt wie bei der Methode breitensucheVonBis(start, ziel). Daher: wie kann ich die Breitensuche dann abbrechen, wenn der erste Knoten mit Glasfaser erreicht wurde?
Kann bitte jemand weiterhelfen?
Von diesem Code sollen wir ausgehen:
Java:
public void breitensucheVonBis(String start, String ziel){
int startindex = knotenindexSuchen2(start);
int zielindex = knotenindexSuchen2(ziel);
if(startindex == -1 || zielindex == -1){
System.out.println("Fehler! Der Startknoten oder der Zielknoten konnte nicht gefunden werden.");
}
else{
knotenInitialisieren();
ArrayList<Integer> warteschlange = new ArrayList<Integer>(); // Warteschlange fuer die Knoten (Speichern der Indizes)
warteschlange.add(startindex); // Hinzufuegen des Startknotens in die Warteschlange
knotenfeld[startindex].istBesuchtSetzen(true); // Startknoten auf "besucht" setzen
System.out.println("Breitensuche: ");
System.out.println("Knoten " + knotenfeld[startindex].bezeichnungGeben() + " besucht!");
int aktiverKnotenindex = startindex;
while(!warteschlange.isEmpty() && aktiverKnotenindex != zielindex){
aktiverKnotenindex = warteschlange.remove(0);
if(aktiverKnotenindex == zielindex){
System.out.println("Ziel gefunden!");
}
else{
for(int i = 0; i < aktAnzahl; i++){
if(adjazenzmatrix[aktiverKnotenindex][i] == true && !knotenfeld[i].istBesuchtGeben()){
knotenfeld[i].istBesuchtSetzen(true);
warteschlange.add(i);
System.out.println("Knoten " + knotenfeld[i].bezeichnungGeben() + " besucht!");
}
}
}
}
}
}
Hier der abgeänderte Code:
Code:
public void breitensucheAusfuehrenBisGlasfaser(String start){
int startindex = knotenindexSuchen2(start);
if(startindex == -1){
System.out.println("Fehler! Der Startknoten konnte nicht gefunden werden.");
}
else{
knotenInitialisieren();
ArrayList<Integer> warteschlange = new ArrayList<Integer>(); // Warteschlange fuer die Knoten (Speichern der Indizes)
warteschlange.add(startindex); // Hinzufuegen des Startknotens in die Warteschlange
knotenfeld[startindex].istBesuchtSetzen(true); // Startknoten auf "besucht" setzen
System.out.println("Breitensuche: ");
System.out.println("Knoten " + knotenfeld[startindex].bezeichnungGeben() + " besucht!");
System.out.println("Glasfaser vorhanden: " + knotenfeld[startindex].hatGlasfaserGeben() + ".");
int aktiverKnotenindex = startindex;
while(!warteschlange.isEmpty() && !knotenfeld[aktiverKnotenindex].hatGlasfaserGeben()){
aktiverKnotenindex = warteschlange.remove(0);
if(knotenfeld[aktiverKnotenindex].hatGlasfaserGeben() == true){
System.out.println("Ziel gefunden!");
}
else{
for(int i = 0; i < aktAnzahl; i++){
if(adjazenzmatrix[aktiverKnotenindex][i] == true && !knotenfeld[i].istBesuchtGeben()){
knotenfeld[i].istBesuchtSetzen(true);
warteschlange.add(i);
System.out.println("Knoten " + knotenfeld[i].bezeichnungGeben() + " besucht!");
System.out.println("Glasfaser vorhanden: " + knotenfeld[i].hatGlasfaserGeben() + ".");
}
}
}
}
}
}