Hej :) mam mały problem z napisaniem funkcji przeszukującej wszerz graf nieskierowany. Zadeklarowałam wszystkie potrzebne elementy, ale dochodzę do momentu stworzenia pętli i mam myślową blokadę. Znajdzie się jakiś dobry człowiek który mi z tym detalem pomoże?
package grafy2;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class GrafNieskierowanyLista extends GrafNieskierowany{
protected static final byte Nieruszany = 0;
protected static final byte Zaznaczony_Do_Odwiedzenia = 1;
protected static final byte Odwiedzony = 2;
private LinkedList<Integer> []listaSasiedztwa;
public GrafNieskierowanyLista(int iloscWierzcholkow){
listaSasiedztwa = new LinkedList[iloscWierzcholkow];
for (int i = 0; i < listaSasiedztwa.length; i++) {
listaSasiedztwa[i] = new LinkedList<Integer>();
}
}
@Override
public void dodajKrawedz(int wStart, int wKoncowy) {
if(wStart < 0 || wKoncowy < 0 || wStart == wKoncowy)
throw new IllegalArgumentException("Niewlasciwy numer wierzcholka");
if (listaSasiedztwa[wStart].indexOf(wKoncowy) < 0)
listaSasiedztwa[wStart].add(wKoncowy);
if (listaSasiedztwa[wKoncowy].indexOf(wStart) < 0)
listaSasiedztwa[wKoncowy].add(wStart);
}
@Override
public void przeszukajWszerz(int odWierzcholka) {
byte stanyWierzcholkow[] = new byte[listaSasiedztwa.length];
for (int i = 0; i<stanyWierzcholkow[i]; i++)
stanyWierzcholkow[i] = Nieruszany;
Queue<Integer> kolejkaDoPrzeszukania = new LinkedList<Integer>();
//kolejka do ktorej wrzucamy info czy el zostal zaznczony
while(!kolejkaDoPrzeszukania.isEmpty()){
int elStart=kolejkaDoPrzeszukania.peek();
System.out.print(elStart+" ");
stanyWierzcholkow[elStart] = Odwiedzony;
for(int i=0; i<listaSasiedztwa.length;i++){
if(listaSasiedztwa[wStart]==1){
if (stanyWierzcholkow[i] == Nieruszany) {
stanyWierzcholkow[i] = Zaznaczony_Do_Odwiedzenia;
kolejkaDoPrzeszukania.remove(i);
}
}
}
}
}
@Override
public void przeszukajWGlab(int odWierzcholka) {
byte stanyWierzcholkow[] = new byte[listaSasiedztwa.length];
for (int i = 0; i<stanyWierzcholkow[i]; i++)
stanyWierzcholkow[i] = Nieruszany;
Stack<Integer> stosDoPrzeszukania = new Stack<Integer>();
//stos do którego wrzucamy info czy el został zaznczony
stosDoPrzeszukania.push(odWierzcholka);
while( ! stosDoPrzeszukania.isEmpty()){
int wStart = stosDoPrzeszukania.pop();//odwiedz szczyt
System.out.print(wStart+" ");
//zaznacz szczyt
stanyWierzcholkow[wStart] = Odwiedzony;
//nieruszanych sÄ…siadĂłw zaznacz do odwiedzin
for(int i = 0; i<listaSasiedztwa.length; i++){
//jezeli to jest sÄ…siad
if(stanyWierzcholkow[i] == Nieruszany){
stanyWierzcholkow[i] = Zaznaczony_Do_Odwiedzenia;
stosDoPrzeszukania.push(i);
}
}
}
System.out.println("");
}
@Override
public String toString() {
String wynik = "";
for(int i = 0;i <listaSasiedztwa.length; i++){
wynik = wynik +i+" ; ";
LinkedList<Integer> sasiedziBiezacego = listaSasiedztwa[i];
for(int j = 0; j<sasiedziBiezacego.size(); j++){
wynik += sasiedziBiezacego.get(j)+" -> ";
}
wynik = wynik +"\n";
}
return wynik;
}
}