By w pełni zrozumieć zagadnienia poruszane w tym e‑materiale, musimy znać kilka podstawowych pojęć:

Zaczniemy od stopnia grafu – jest on równy maksymalnemu stopniowi wierzchołka w tym grafie.

Stopniem wierzchołka grafu nieskierowanego nazywamy liczbę krawędzikrawędźkrawędzi z nim incydentnych.

Ważne!

Jeśli w grafie nieskierowanym występuje krawędź, która jest pętlą, liczymy ją jako dwie krawędzie.

Stopniem wierzchołka grafu skierowanego nazywamy sumę dwóch liczb – liczby krawędzi do niego wchodzących (stopień wejściowy) oraz liczby krawędzi z niego wychodzących (stopień wyjściowy).

O grafie mówimy, że jest spójny, jeśli dla każdych dwóch jego wierzchołków istnieje ścieżka, która je ze sobą łączy.

Graf nieskierowany jest spójny, jeśli dla każdej pary wierzchołków istnieje ścieżka, która je łączy. Jeśli takiej ścieżki nie ma, wówczas taki graf określamy niespójnym.

grafie skierowanym możemy powiedzieć, że jest grafem spójnym, jeśli po tym, jak wszystkie jego krawędzie skierowane zostaną zastąpione krawędziami nieskierowanymi, graf ten będzie grafem nieskierowanym spójnym,

Ważne!

Więcej na temat spójności grafu skierowanego znajdziesz w dalszej części e‑materiału w punkcie Digrafy.

Przykład 1

Zapoznaj się z przykładem grafu nieskierowanego, który nie jest spójny (składa się z trzech spójnych składowych).

R1F2Y4l34n02y
Niespójny graf o trzech spójnych składowych
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Spójny podgraf takiego grafu, który nie jest zawarty w żadnym większym spójnym podgrafie, nazywamy składową grafu. Możemy zauważyć, że każdy graf niespójny jest sumą pewnych spójnych grafów.

Przyjrzyjmy się grafom z Przykładu 1. Dane są trzy grafy spójne nieskierowane. Ich suma daje graf nieskierowany niespójny.

W kontekście spójności grafów definiujemy również pojęcie mostu, czyli krawędzi, której usunięcie sprawi, że graf zwiększy liczbę spójnych składowych o jeden.

R1VzXDO2cWEv9
Lewy obrazek przedstawia graf składający się z jednej składowej. Po usunięciu krawędzi otrzymamy dwa spójne podgrafy (składowe). Krawędź ta jest zatem mostem.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Pojęcie mostu jest podstawą działania niektórych algorytmów grafowych, takich jak na przykład algorytm Fleury'ego służący do znajdowania w grafie ścieżki lub cyklu Eulera.

Przykład 2

Zaprezentowany graf to graf spójny, którego wierzchołki mają następujące stopnie:

  • stopień wierzchołka 0: 3

  • stopień wierzchołka 1: 2

  • stopień wierzchołka 2: 4

  • stopień wierzchołka 3: 2

  • stopień wierzchołka 4: 3

  • stopień wierzchołka 5: 2

Tym samym stopień grafu wynosi 4 (ponieważ tyle wynosi maksymalny stopień wierzchołka grafu).

RlfB6l1pznJKy
Spójny graf nieskierowany, którego stopień grafu to 4 (ponieważ jest to największy stopień wierzchołka tego grafu).
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Już wiesz

Spójrzmy, jak wygląda graf przedstawiający mosty i lądy w Królewcu z czasów Eulera (by przypomnieć sobie, dlaczego przywołujemy mosty królewieckie w kontekście teorii grafów, przejdź do e‑materiału Zagadnienie mostów królewieckichPwWUgv9LEZagadnienie mostów królewieckich):

Rhc8uOvNVtNsd
Nieskierowany spójny graf, który przedstawia mosty i lądy w Królewcu z czasów Eulera.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

W teorii grafów taka ścieżkaścieżkaścieżka zamknięta nazywana jest cyklem Eulera. O ścieżce mówimy, że jest zamknięta, jeśli wierzchołek początkowy jest tożsamy z jej wierzchołkiem końcowym.

Warunki istnienia cyklu Eulera w grafie określa następujące twierdzenie:

Spójny graf zawiera cykl Eulera wtedy i tylko wtedy, gdy każdy wierzchołek jest parzystego stopnia.

Warunkiem koniecznym istnienia cyklu Eulera jest spójność grafu. Gdyby graf nie był spójny, nie istniałaby możliwość odwiedzenia wszystkich jego wierzchołków w jednym cyklu.

Digrafy

Digraf (inaczej graf skierowany) to taki graf, w którym krawędzie mają ustalony kierunek z jednego wierzchołka do drugiego. Na rysunku zwykle jest to oznaczane strzałką w jednym z końców krawędzi. Formalnie powiemy, że grafem skierowanym (digrafem) nazywamy graf składający się z niepustego i skończonego zbioru wierzchołków oraz skończonej rodziny krawędzi , czyli z uporządkowanych par elementów zbioru .

Dla zaprezentowanego grafu zbiór wierzchołków to . Rodzina krawędzi to następujące pary: .

RUidT1OAFZJY1
Spójny digraf (czyli graf skierowany)
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jeśli są wierzchołkami, to krawędź skierowana jest parą uporządkowaną i oznacza krawędź poprowadzoną z wierzchołka do wierzchołka . Jeśli w pewnym grafie istnieją krawędzie skierowane , to nie są one krawędziami wielokrotnymi, ponieważ tutaj uwzględniamy kolejność wierzchołków.

Poruszanie się po krawędziach wychodzących

Stopniem wyjściowym wierzchołka digrafu nazywamy liczbę krawędzi skierowanych, wychodzących z wierzchołka . Stopień wyjściowy wierzchołka oznaczamy symbolem:

Analogicznie, stopniem wejściowym wierzchołka w digrafie będzie liczba krawędzi skierowanych, poprowadzonych do wierzchołka . Liczbę taką oznaczamy symbolem:

W digrafach możemy przechodzić przez krawędzie tylko w kierunku zgodnym z kolejnością wierzchołków krawędzi. Na przykład krawędź skierowaną można przejść tylko od do , natomiast odwrotne przejście jest niemożliwe.

Dla zaprezentowanego wyżej grafu stopień wejściowy wierzchołka to 1 (do wierzchołka skierowana jest tylko jedna krawędź), natomiast stopień wyjściowy wierzchołka to 2 (z wierzchołka wychodzą dwie krawędzie).

Spójność digrafów

Ponieważ w digrafach przechodzimy po danej krawędzi w ściśle określonym kierunku, może dojść do sytuacji, że z pewnego wierzchołka nie dostaniemy się do drugiego.

Rmw4TH9TChPk3
Graf skierowany, który składa się z trzech silnie spójnych składowych (zaznaczonych przerywanymi liniami).
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Mówimy, że podgraf skierowany jest silnie spójną składową, jeśli każdy wierzchołek jest osiągalny z każdego innego wierzchołka składowej - czyli z każdego wierzchołka możemy poprowadzić ścieżkę do dowolnego wierzchołka.

Dla zaprezentowanego grafu możemy wyróżnić trzy podgrafy, które są silnie spójnymi składowymi. Otoczono je przerywanymi liniami.

Badanie stopnia wierzchołka grafu

Graf nieskierowany

Specyfikacja problemu:

Dane:

  • macierz_sasiedztwa – macierz sąsiedztwa grafu; lista dwuwymiarowa liczb naturalnych

Wynik:

  • wypisane stopnie poszczególnych wierzchołków

Dany jest następujący graf spójny nieskierowany bez wag:

R1OA3UoJEctUA
Graf spójny nieskierowany, który składa się z sześciu wierzchołków i dziewięciu krawędzi.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Jego macierz sąsiedztwa:

R1eJLJbnGIkP5
Macierz sąsiedztwa zaprezentowanego grafu.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Implementacja zaprezentowanej macierzy sąsiedztwa w języku Python:

Linia 1. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 8. zamknij nawias kwadratowy.

Zapiszmy funkcję odpowiedzialną za określenie stopni poszczególnych wierzchołków.

Zaczniemy od zapisania nagłówka funkcji. Funkcja przyjmuje jeden argument – macierz sąsiedztwa grafu.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek.

W kolejnym kroku tworzymy zmienną n przechowującą długość listy macierz_sasiedztwa (liczbę wierzchołków) oraz listę stopnie o długości równej liczbie wierzchołków grafu. Listę wypełniamy zerami. Będzie ona przechowywać stopnie kolejnych wierzchołków.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n.

Zapisujemy pętlę for, która będzie iterować przez wszystkie wierzchołki (wiersze).

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek.

Zapisujemy zagnieżdżoną pętlę for, która będzie iterowała przez pozostałe wierzchołki grafu (kolumny w danym wierszu).

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek.

W pętli zapisujemy instrukcję warunkową, za pomocą której sprawdzimy, czy wierzchołki o danych indeksach są połączone krawędzią. Jeśli tak, zwiększamy stopień i-tego wierzchołka, czyli inkrementujemy wartość i-tego elementu listy stopnie.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1.

Dodajemy kolejną instrukcję warunkową, która obsłuży przypadek, w którym krawędź jest pętlą – wtedy liczymy ją podwójnie – ponownie inkrementujemy i-ty element listy stopnie.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. if i znak równości znak równości j dwukropek. Linia 9. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1.

Kompletny kod programu:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. if i znak równości znak równości j dwukropek. Linia 9. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 11. print otwórz nawias okrągły cudzysłów Stopnie otwórz nawias okrągły graf nieskierowany zamknij nawias okrągły dwukropek cudzysłów zamknij nawias okrągły. Linia 12. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 13. print otwórz nawias okrągły cudzysłów indeks wierzcholka dwukropek cudzysłów przecinek i przecinek cudzysłów stopien dwukropek cudzysłów przecinek stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 16. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 17. otwórz nawias kwadratowy 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 18. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 19. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 20. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 21. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 22. zamknij nawias kwadratowy. Linia 24. stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły.

Wynik działania programu:

Linia 1. Stopnie otwórz nawias okrągły nieskierowany zamknij nawias okrągły dwukropek. Linia 2. indeks wierzcholka dwukropek 0 stopien dwukropek 3. Linia 3. indeks wierzcholka dwukropek 1 stopien dwukropek 3. Linia 4. indeks wierzcholka dwukropek 2 stopien dwukropek 4. Linia 5. indeks wierzcholka dwukropek 3 stopien dwukropek 2. Linia 6. indeks wierzcholka dwukropek 4 stopien dwukropek 4. Linia 7. indeks wierzcholka dwukropek 5 stopien dwukropek 2.

Graf skierowany

Specyfikacja problemu:

Dane:

  • macierz_sasiedztwa – macierz sąsiedztwa grafu; lista dwuwymiarowa liczb naturalnych

Wynik:

  • wypisane stopnie poszczególnych wierzchołków (sumy stopni wierzchołków wejściowych i wyjściowych)

Dany jest następujący graf spójny skierowany bez wag:

R51LJ4e2RonN5
Spójny graf skierowany, którego stopień grafu wynosi 5, ponieważ tyle wynosi największy stopień spośród stopni wierzchołków tego grafu (po zsumowaniu stopni wejściowych oraz wyjściowych dla każdego wierzchołka).
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 2.0.

Macierz sąsiedztwa grafu:

R12LrCWhJbLTN
Macierz sąsiedztwa zaprezentowanego grafu.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Implementacja zaprezentowanej macierzy sąsiedztwa w języku Python:

Linia 1. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 8. zamknij nawias kwadratowy.

Zapiszmy funkcję odpowiedzialną za określenie stopni poszczególnych wierzchołków. W przypadku tej implementacji nie będziemy rozróżniać stopni wejściowych oraz wyjściowych. Stopień wierzchołka będzie równy sumie stopni wejściowych i wyjściowych wierzchołka.

W przypadku prezentowanego programu będziemy obliczać sumę stopni wejściowych oraz wyjściowych dla każdego wierzchołka.

Zaczniemy od zapisania nagłówka funkcji. Funkcja przyjmuje jeden argument – macierz sąsiedztwa.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek.

Zmiennej n przypisujemy wartość równą liczbie wierzchołków.

W kolejnym kroku tworzymy listę stopnie o długości równej n. Listę wypełniamy zerami. Będzie ona przechowywać stopnie kolejnych wierzchołków.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n.

Zapisujemy pętlę for, która będzie iterować przez wszystkie wierzchołki (wiersze).

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek.

Zapisujemy zagnieżdżoną pętlę for, która będzie iterowała przez pozostałe wierzchołki grafu (kolumny w danym wierszu) – w pętli sprawdzimy, czy istnieje krawędź między wierzchołkiem o indeksie j.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek.

W pętli zapisujemy zatem instrukcję warunkową, za pomocą której sprawdzimy, czy wierzchołki o danych indeksach (i oraz j) są połączone krawędzią. Jeśli tak, zwiększamy stopnie i-tego (ponieważ ma on krawędź wychodzącą) oraz j-tego wierzchołka (ponieważ ma on krawędź wchodzącą), czyli inkrementujemy wartości i-tego oraz j‑tego elementu listy stopnie.

Stopień wierzchołka w grafie skierowanym definiujemy w tym przypadku jako sumę krawędzi wchodzących do wierzchołka i wychodzących z wierzchołka.

Zatem jeśli istnieje krawędź między wierzchołkami i oraz j, to dla wierzchołka i jest to krawędź wyjściowa, a dla wierzchołka j – wejściowa.

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. stopnie otwórz nawias kwadratowy j zamknij nawias kwadratowy plus znak równości 1.

Kompletny kod programu:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. stopnie otwórz nawias kwadratowy j zamknij nawias kwadratowy plus znak równości 1. Linia 10. print otwórz nawias okrągły cudzysłów Stopnie otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek cudzysłów zamknij nawias okrągły. Linia 11. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 12. print otwórz nawias okrągły cudzysłów indeks wierzcholka dwukropek cudzysłów przecinek i przecinek cudzysłów stopien dwukropek cudzysłów przecinek stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 13. print otwórz nawias okrągły zamknij nawias okrągły. Linia 15. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 16. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 17. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 18. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 19. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 20. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 21. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 22. zamknij nawias kwadratowy. Linia 24. stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły.

Wynik działania programu:

Linia 1. Stopnie otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek. Linia 2. indeks wierzcholka dwukropek 0 stopien dwukropek 3. Linia 3. indeks wierzcholka dwukropek 1 stopien dwukropek 3. Linia 4. indeks wierzcholka dwukropek 2 stopien dwukropek 4. Linia 5. indeks wierzcholka dwukropek 3 stopien dwukropek 2. Linia 6. indeks wierzcholka dwukropek 4 stopien dwukropek 5. Linia 7. indeks wierzcholka dwukropek 5 stopien dwukropek 3.
Dla zainteresowanych

Jeśli chcemy obliczać osobno stopnie wejściowe i wyjściowe, musimy zmodyfikować funkcję, by osobno obliczać liczbę obu stopni dla każdego wierzchołka. Potrzebne będą dwie listy – jedna przechowująca stopnie wyjściowe, druga – wejściowe.

Zmienimy również sposób inkrementowania zmiennych w instrukcji warunkowej oraz wypisywania wyników.

Kompletny kod programu wraz z wywołaniem funkcji:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. stopnie podkreślnik wejsciowe znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. stopnie podkreślnik wyjsciowe znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 6. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 7. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 8. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 9. stopnie podkreślnik wyjsciowe otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 10. stopnie podkreślnik wejsciowe otwórz nawias kwadratowy j zamknij nawias kwadratowy plus znak równości 1. Linia 12. print otwórz nawias okrągły cudzysłów Stopnie wejsciowe otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek cudzysłów zamknij nawias okrągły. Linia 13. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 14. print otwórz nawias okrągły cudzysłów indeks wierzcholka dwukropek cudzysłów przecinek i przecinek cudzysłów stopien dwukropek cudzysłów przecinek stopnie podkreślnik wejsciowe otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. print otwórz nawias okrągły zamknij nawias okrągły. Linia 17. print otwórz nawias okrągły cudzysłów Stopnie wyjsciowe otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek cudzysłów zamknij nawias okrągły. Linia 18. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 19. print otwórz nawias okrągły cudzysłów indeks wierzcholka dwukropek cudzysłów przecinek i przecinek cudzysłów stopien dwukropek cudzysłów przecinek stopnie podkreślnik wyjsciowe otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły. Linia 20. print otwórz nawias okrągły zamknij nawias okrągły. Linia 22. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 23. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 24. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 25. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 26. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 27. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 28. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 29. zamknij nawias kwadratowy. Linia 31. stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły.

Efekt działania programu:

Linia 1. Stopnie wejsciowe otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek. Linia 2. indeks wierzcholka dwukropek 0 stopien dwukropek 0. Linia 3. indeks wierzcholka dwukropek 1 stopien dwukropek 1. Linia 4. indeks wierzcholka dwukropek 2 stopien dwukropek 2. Linia 5. indeks wierzcholka dwukropek 3 stopien dwukropek 1. Linia 6. indeks wierzcholka dwukropek 4 stopien dwukropek 4. Linia 7. indeks wierzcholka dwukropek 5 stopien dwukropek 2. Linia 9. Stopnie wyjsciowe otwórz nawias okrągły graf skierowany zamknij nawias okrągły dwukropek. Linia 10. indeks wierzcholka dwukropek 0 stopien dwukropek 3. Linia 11. indeks wierzcholka dwukropek 1 stopien dwukropek 2. Linia 12. indeks wierzcholka dwukropek 2 stopien dwukropek 2. Linia 13. indeks wierzcholka dwukropek 3 stopien dwukropek 1. Linia 14. indeks wierzcholka dwukropek 4 stopien dwukropek 1. Linia 15. indeks wierzcholka dwukropek 5 stopien dwukropek 1.

Badanie stopnia grafu

Graf nieskierowany

Specyfikacja problemu:

Dane:

  • macierz_sasiedztwa – macierz sąsiedztwa grafu; lista dwuwymiarowa liczb naturalnych

Wynik:

  • stopień grafu nieskierowanego

Dany jest następujący graf spójny nieskierowany bez wag:

R1OA3UoJEctUA
Graf spójny nieskierowany, który składa się z sześciu wierzchołków i dziewięciu krawędzi.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Macierz sąsiedztwa grafu:

R2qewExxGb7lq
Macierz sąsiedztwa zaprezentowanego grafu.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Implementacja zaprezentowanej macierzy sąsiedztwa w języku Python:

Linia 1. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 8. zamknij nawias kwadratowy.

W programie wykorzystamy funkcję odpowiedzialną za określenie stopni poszczególnych wierzchołków – zmodyfikujemy ją nieco, by wykorzystać listę stopnie w dalszej części programu.

Zmodyfikowana funkcja:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 4. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości 0. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. if i znak równości znak równości j dwukropek. Linia 9. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1.

Dodatkowo w programie wykorzystamy jeszcze funkcję odpowiedzialną za znalezienie największego stopnia wśród stopni wierzchołków.

Zapiszmy ją. Jako argument przekażemy do funkcji listę przechowującą stopnie kolejnych wierzchołków.

Nagłówek funkcji:

Linia 1. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek.

Zaczniemy od utworzenia zmiennej maksymalnyStopien. Przypiszemy jej pierwszy element listy stopnie (element o indeksie 0).

Linia 1. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 2. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.

Następnie zapiszemy pętlę for, która będzie iterowała przez elementy listy stopnie, zaczynając od elementu o indeksie 1.

Linia 1. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 2. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. for i in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły stopnie zamknij nawias okrągły zamknij nawias okrągły dwukropek.

W pętli zapisujemy instrukcję warunkową. Wykorzystamy ją do sprawdzenia, czy aktualnie analizowany stopień wierzchołka jest większy od wartości przechowywanej w zmiennej maksymalnyStopien. Jeśli tak, zaktualizujemy wartość tej zmiennej, przypisując jej wartość analizowanego stopnia wierzchołka.

Po przeiterowaniu przez elementy listy stopnie funkcja zwraca wartość zmiennej maksymalnyStopien, czyli stopień grafu.

Linia 1. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 2. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. for i in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły stopnie zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 4. if stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias ostrokątny maksymalny podkreślnik stopien dwukropek. Linia 5. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 6. return maksymalny podkreślnik stopien.

Kompletny kod programu:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły dwukropek. Linia 2. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 3. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 4. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości 0. Linia 5. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 6. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 7. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 8. if i znak równości znak równości j dwukropek. Linia 9. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 11. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 12. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 13. for i in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły stopnie zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 14. if stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias ostrokątny maksymalny podkreślnik stopien dwukropek. Linia 15. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 16. return maksymalny podkreślnik stopien. Linia 18. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 19. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 20. otwórz nawias kwadratowy 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 21. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 22. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 23. otwórz nawias kwadratowy 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 24. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 25. zamknij nawias kwadratowy. Linia 27. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 28. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 29. stopnie podkreślnik w podkreślnik grafie podkreślnik nieskierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły. Linia 30. maksymalny podkreślnik stopien znak równości znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły. Linia 31. print otwórz nawias okrągły cudzysłów Stopien grafu nieskierowanego dwukropek cudzysłów przecinek maksymalny podkreślnik stopien zamknij nawias okrągły.

Wynik działania programu:

Linia 1. Stopien grafu nieskierowanego dwukropek 4.

Graf skierowany

Specyfikacja problemu:

Dane:

  • macierz_sasiedztwa – macierz sąsiedztwa grafu; lista dwuwymiarowa liczb naturalnych

Wynik:

  • stopień grafu skierowanego

Dany jest następujący graf spójny skierowany bez wag:

R51LJ4e2RonN5
Spójny graf skierowany, którego stopień grafu wynosi 5, ponieważ tyle wynosi największy stopień spośród stopni wierzchołków tego grafu (po zsumowaniu stopni wejściowych oraz wyjściowych dla każdego wierzchołka).
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 2.0.

Macierz sąsiedztwa grafu:

R12LrCWhJbLTN
Macierz sąsiedztwa zaprezentowanego grafu.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Implementacja zaprezentowanej macierzy sąsiedztwa w języku Python:

Linia 1. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 3. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 8. zamknij nawias kwadratowy.

W programie ponownie wykorzystamy zmodyfikowaną funkcję odpowiedzialną za określenie stopni poszczególnych wierzchołków.

Funkcja:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły dwukropek. Linia 2. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 3. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości 0. Linia 4. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 6. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 7. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy i zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 8. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1.

Funkcja odpowiedzialna za określenie największego stopnia wierzchołka jest taka sama, jak dla implementacji dla grafu nieskierowango:

Linia 1. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 2. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. for i in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły stopnie zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 4. if stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias ostrokątny maksymalny podkreślnik stopien dwukropek. Linia 5. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 6. return maksymalny podkreślnik stopien.

Kompletny kod programu:

Linia 1. def stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły dwukropek. Linia 2. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 3. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości 0. Linia 4. for j in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 5. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 6. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 7. if macierz podkreślnik sasiedztwa otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy i zamknij nawias kwadratowy wykrzyknik znak równości 0 dwukropek. Linia 8. stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy plus znak równości 1. Linia 11. def znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły dwukropek. Linia 12. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 13. for i in range otwórz nawias okrągły 1 przecinek len otwórz nawias okrągły stopnie zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 14. if stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias ostrokątny maksymalny podkreślnik stopien dwukropek. Linia 15. maksymalny podkreślnik stopien znak równości stopnie otwórz nawias kwadratowy i zamknij nawias kwadratowy. Linia 16. return maksymalny podkreślnik stopien. Linia 18. macierz podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy. Linia 19. otwórz nawias kwadratowy 0 przecinek 1 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 20. otwórz nawias kwadratowy 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 21. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 22. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy przecinek. Linia 23. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 zamknij nawias kwadratowy przecinek. Linia 24. otwórz nawias kwadratowy 0 przecinek 0 przecinek 0 przecinek 0 przecinek 1 przecinek 0 zamknij nawias kwadratowy. Linia 25. zamknij nawias kwadratowy. Linia 27. n znak równości len otwórz nawias okrągły macierz podkreślnik sasiedztwa zamknij nawias okrągły. Linia 28. stopnie znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 29. stopnie podkreślnik w podkreślnik grafie podkreślnik skierowanym otwórz nawias okrągły macierz podkreślnik sasiedztwa przecinek stopnie zamknij nawias okrągły. Linia 30. maksymalny podkreślnik stopien znak równości znajdz podkreślnik maksymalny podkreślnik stopien otwórz nawias okrągły stopnie zamknij nawias okrągły. Linia 31. print otwórz nawias okrągły cudzysłów Stopien grafu skierowanego dwukropek cudzysłów przecinek maksymalny podkreślnik stopien zamknij nawias okrągły.

Wynik działania programu:

Linia 1. Stopien grafu skierowanego dwukropek 5.

Słownik

cykl
cykl

ścieżka zamknięta, która zaczyna się i kończy w tym samym wierzchołku

graf
graf

struktura składająca się z niepustego zbioru wierzchołków oraz ze zbioru krawędzi; dla grafu zbiór wierzchołków oznaczamy (ang. verticies – wierzchołki), a zbiór krawędzi – (ang. edges – krawędzie); liczbę elementów zbioru oznaczamy literą , zaś liczbę elementów zbioru literą

graf spójny
graf spójny

graf, w którym każda para wierzchołków połączona jest ścieżką

krawędź
krawędź

nieuporządkowana para (niekoniecznie różnych) elementów zbioru wierzchołków, tj. takich, które są ze sobą połączone; w reprezentacji graficznej jest to linia łącząca te wierzchołki; krawędź może łączyć ze sobą jeden wierzchołek (wtedy nazywana jest pętlą)

multigraf
multigraf

graf, w którym możliwe jest połączenie dwóch wierzchołków za pomocą kilku krawędzi lub w którym występują krawędzie łączące wierzchołek sam ze sobą

stopień wierzchołka
stopień wierzchołka

liczba krawędzi incydentnych z danym wierzchołkiem

ścieżka
ścieżka

trasa łącząca kolejne wierzchołki grafu, w której wszystkie krawędzie są różne

wierzchołek
wierzchołek

inaczej: punkt, węzeł; element niepustego zbioru, który wraz ze zbiorem krawędzi tworzy graf