I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
I.
1 Utwórz listę krawędzi biorąc na jej początek krawędzie incydentne z dowolnie wybranym wierzchołkiem v∗: e1, e2, . . . , ed (v∗), ed (v∗)+1, . . . , em
2 Dla każdego wierzchołka v ∈ V (G ), r (v ) := v ; p(v ) := NONE .
3 k := 1 – wskaźnik wykorzystywany przy przeglądaniu krawędzi;
4 END := d (v∗) + 1 – będzie określał zakończenie działania algorytmu;
5 i := 0 – licznik, ile dodano krawędzi do drzewa;
6 Tree(1) := None – nie zaczęliśmy budować drzewa.
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy (Rozpatrujemy w pewnej kolejności, z nawracaniem, krawędzie ek= (uk, vk) zaczynając od e1= (u1, v1), bo k = 1 na początku)
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek); i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk)
(Jeśli rozpatrywana krawędź ek łączy dwa różne drzewa), to dodajemy ek za pomocą AddEdge(ek);
i := i + 1; (zapisujemy, że dodaliśmy w sumie i kraw. do drzewa)
Tree(i ) := k (zapisujemy indeks nowo dodanej krawędzi do drzewa).
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
(Wszystkie krawędzie incydentne z v∗zostały rozpatrzone)
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa (Skończyliśmy budować kolejne drzewo. Wypisać jego krawędzie można np. bazując na poprzednikach (p(·)) lub na indeksach z Tree)
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| (Jeśli ostatnio dodana krawędź jest ostatnia na liście krawędzi), to
usuwamy ją za pomocą DeleteEdge(e|E (G )|)
i := i − 1 (Będziemy zaraz rozpatrywać krawędź, która przed nią została dodana do drzewa)
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1 (w kolejnej turze rozpatrzymy krawędź znajdującą się na liście krawędzi zaraz po usuniętej)
4 i := i − 1 (zmieniamy licznik liczby krawędzi aktualnie dodanych do drzewa)
W przeciwnym przypadku k := k + 1
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1 (w kolejnej turze weźmiemy kolejną krawędź z listy krawędzi)
Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący wszystkie drzewa rozpięte
Algorytm generujący drzewa – opis
II. Powtarzamy
1 Pobierz z listy ek= (uk, vk).
2 Jeśli r (uk) 6= r (vk) , to
dodajemy ek za pomocą AddEdge(ek);
i := i + 1;
Tree(i ) := k .
3 Jeśli Tree(1) = END, to STOP
4 Jeśli i = |V (G )| − 1, to wydajemy krawędzie zbudowanego drzewa
5 Jeśli i = |V (G )| − 1 lub k = |E (G )| (Jeśli zbudowaliśmy drzewo lub skończyły się krawędzie), to
1 Jeśli Tree(i ) = |E (G )| , to
usuwamy ją za pomocą DeleteEdge(e|E (G )|) i := i − 1
2 Usuwamy eTree(i )za pomocą DeleteEdge(eTree(i )).
3 k := Tree(i ) + 1
4 i := i − 1
W przeciwnym przypadku k := k + 1