Cykl Eulera

R1BdPlvr8Lhbh1
Portret Leonharda Eulera
Źródło: Jakob Emanuel Handmann, dostępny w internecie: pl.wikipedia.org [dostęp 26.12.2023], domena publiczna.

Jak wspomnieliśmy we wprowadzeniu, w tym e‑materiale zajmiemy się między innymi algorytmem, za pomocą którego sprawdzimy, czy dany grafgrafgraf zawiera cyklcyklcykl Eulera (tzn. czy jest grafem eulerowskim).

O grafie mówimy, że jest grafem eulerowskim, jeśli istnieje w nim cykl, który zawiera każdą jego krawędź.

Wiemy już, że spójny graf zawiera cykl Eulera wtedy i tylko wtedy, gdy każdy wierzchołek jest parzystego stopnia. To, czy wierzchołki są parzystego stopnia, możemy odczytać np. z macierzy sąsiedztwa danego grafu czy z ilustracji go przedstawiającej.

Tak prezentuje się graf przedstawiający mosty i lądy w Królewcu z czasów Eulera (problem ten został omówiony w e‑materiale Zagadnienie mostów królewieckichPwWUgv9LEZagadnienie mostów królewieckich):

R1R1e2UlsUpOf
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.

Graf przedstawiający pięć mostów współczesnego Królewca:

R1AIRY8pYxPSN
Graf nieskierowany bez wag, który składa się z czterech wierzchołków oraz pięciu krawędzi. Graf przedstawia mosty współczesnego Królewca.
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Macierz sąsiedztwa zaprezentowanego grafu:

0111100110011110

By graf zawierał cykl Eulera, wszystkie jego wierzchołki muszą być parzystego stopnia.

Sprawdźmy, czy graf reprezentowany przedstawioną macierzą sąsiedztwa jest grafem eulerowskim. Zacznijmy od sprawdzenia stopnia wierzchołka oznaczonego jako wierzchołek A.

Musimy odczytać zatem informacje zawarte w pierwszym wierszu macierzy. Wierzchołek A nie jest połączony krawędzią z samym sobą (nie zawiera zatem pętli). Jest natomiast połączony krawędzią z wierzchołkami B, C oraz D (ponieważ w komórkach odpowiadających tym wierzchołkom znajdują się jedynki).

Zatem z wierzchołka wychodzą trzy krawędzie. Stopień tego wierzchołka wynosi więc trzy, w konsekwencji graf nie jest grafem eulerowskim.

Przejdźmy do pseudkodu algorytmu sprawdzania, czy graf zawiera cykl Eulera.

Specyfikacja problemu:

Dane:

  • macierzSąsiedztwa – macierz sąsiedztwa grafu; tablica tablic liczb naturalnych z przedziału <0, 1>

Wynik:

  • komunikat informujący o tym, czy graf zawiera cykl Eulera (tzn. czy jest grafem eulerowskim)

Spójny graf zawiera cykl Eulera wtedy i tylko wtedy, gdy każdy wierzchołek jest parzystego stopnia. To, czy wierzchołki są parzystego stopnia, możemy odczytać z macierzy sąsiedztwa danego grafu.

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

R18enn1SlDMh3
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 zaprezentowanego grafu:

011010101010110101001010110101001010

Ponieważ nie wszystkie wierzchołki grafu (tj. wierzchołki 0 oraz 1) są parzystego stopnia, graf nie jest grafem eulerowskim (nie zawiera cyklu Eulera).

W programie wykorzystamy funkcję służącą do obliczania stopni wierzchołków grafu. Od niej zaczniemy.

Funkcja jako argument przyjmuje macierz sąsiedztwa grafu.

Zapiszmy jej nagłówek.

Linia 1. funkcja otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny stopnieWierzchołkówWGrafie otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny otwórz nawias okrągły otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny macierzSąsiedztwa otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny przecinek otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny stopnieWierzchołków otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny zamknij nawias okrągły dwukropek.

Zaczynamy od utworzenia zmiennej n, której przypisujemy liczbę wierzchołków grafu, czyli długość tablicy macierzSąsiedztwa. W kolejnym kroku tworzymy tablicę stopnieWierzchołków o długości n i wypełniamy ją zerami. Tablica będzie przechowywać informacje na temat stopni kolejnych wierzchołków.

Linia 1. funkcja stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa przecinek stopnieWierzchołków zamknij nawias okrągły dwukropek. Linia 2. n ← długość otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 3. stopnieWierzchołków ← otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n.

Zapisujemy pętlę dla, która będzie iterować przez kolejne wierzchołki grafu. W tej pętli zapisujemy zagnieżdżoną pętlę dla, która również będzie iterować przez wierzchołki grafu.

W pętli zagnieżdżonej zapisujemy instrukcję warunkową, w której sprawdzimy, czy istnieje krawędź łącząca dwa wierzchołki. Jeśli tak, wartość odpowiedniego elementu tablicy stopnieWierzchołków zostanie zwiększona o 1.

Linia 1. funkcja stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa przecinek stopnieWierzchołków zamknij nawias okrągły dwukropek. Linia 2. n ← długość otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 3. stopnieWierzchołków ← otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 5. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 6. jeżeli macierzSąsiedztwa 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. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1.

Wewnątrz tej instrukcji warunkowej zapisujemy kolejną, która zwiększy wartość tego elementu drugi raz, jeśli krawędź to pętla (czyli wychodzi z tego samego wierzchołka, do którego wchodzi).

Funkcja zwraca tablicę stopnieWierzchołków.

Linia 1. funkcja stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa przecinek stopnieWierzchołków zamknij nawias okrągły dwukropek. Linia 2. n ← długość otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 3. stopnieWierzchołków ← otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 5. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 6. jeżeli macierzSąsiedztwa 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. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 8. jeżeli i znak równości j dwukropek. Linia 9. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 11. zwróć stopnieWierzchołków.

Przejdźmy do zapisania funkcji odpowiedzialnej za sprawdzenie, czy w danym grafie reprezentowanym macierzą sąsiedztwa znajduje się cykl Eulera.

Zaczynamy od zapisania nagłówka funkcji istnienieCykluEulera, która jako argument przyjmuje macierz sąsiedztwa macierzSąsiedztwa.

Linia 1. funkcja istnienieCykluEulera otwórz nawias okrągły otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny macierzSąsiedztwa otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny zamknij nawias okrągły dwukropek.

Zaczynamy stworzenia pustej tablicy stopnieWierzchołków, a następnie wywołania funkcji stopnieWierzchołkówWGrafie i przypisania wyników jej działania utworzonej tablicy stopnieWierzchołków.

Linia 1. funkcja istnienieCykluEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły.

W kolejnym kroku tworzymy zmienną liczbaNieparzystych i przypisujemy jej wartość 0. Wykorzystamy ją jako licznik wierzchołków o stopniu nieparzystym.

Linia 1. funkcja istnienieCykluEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 4. liczbaNieparzystych ← 0.

Zapisujemy pętlę dla, która będzie iterować przez kolejne elementy tablicy stopnieWierzchołków. W pętli zapisujemy instrukcję warunkową. Instrukcja warunkowa dla każdego elementu tablicy stopnieWierzchołków sprawdzi, czy jest on liczbą parzystą, czyli czy dzieli się przez liczbę 2 bez reszty.

Jeśli liczba nie dzieli się przez 2 bez reszty, zwiększamy wartość licznika liczbaNieparzystych o 1.

Linia 1. funkcja istnienieCykluEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 4. liczbaNieparzystych ← 0. Linia 6. dla stopień w stopnieWierzchołków wykonuj dwukropek. Linia 7. jeżeli stopień mod 2 wykrzyknik znak równości 0 dwukropek. Linia 8. liczbaNieparzystych ← liczbaNieparzystych plus 1.

Po zakończeniu pętli zostaje obliczona liczba wierzchołków o stopniu nieparzystym.

Zapisujemy kolejną instrukcję warunkową, której zadaniem będzie wypisanie odpowiedniego komunikatu na podstawie tego, czy przynajmniej jeden z wierzchołków grafu ma nieparzysty stopień. Jeśli nie, graf jest grafem eulerowskim –zawiera cykl Eulera. Wypisujemy odpowiedni komunikat.

Jeśli zaś graf ma przynajmniej jeden wierzchołek stopnia nieparzystego, graf nie zawiera cyklu Eulera. Wypisujemy wtedy odpowiedni komunikat.

Linia 1. funkcja istnienieCykluEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 4. liczbaNieparzystych ← 0. Linia 6. dla stopień w stopnieWierzchołków wykonuj dwukropek. Linia 7. jeżeli stopień mod 2 wykrzyknik znak równości 0 dwukropek. Linia 8. liczbaNieparzystych ← liczbaNieparzystych plus 1. Linia 10. jeżeli liczbaNieparzystych znak równości 0 dwukropek. Linia 11. wypisz cudzysłów Graf zawiera cykl Eulera kropka cudzysłów. Linia 12. w przeciwnym razie dwukropek. Linia 13. wypisz cudzysłów Graf nie zawiera cyklu Eulera kropka cudzysłów.

Kompletny algorytm:

Linia 1. funkcja stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa przecinek stopnieWierzchołków zamknij nawias okrągły dwukropek. Linia 2. n ← długość otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 3. stopnieWierzchołków ← otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 5. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 6. jeżeli macierzSąsiedztwa 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. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 8. jeżeli i znak równości j dwukropek. Linia 9. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 11. zwróć stopnieWierzchołków. Linia 13. funkcja istnienieCykluEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 14. stopnieWierzchołków ← utwórz pustą tablicę. Linia 15. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 16. liczbaNieparzystych ← 0. Linia 18. dla stopień w stopnieWierzchołków wykonuj dwukropek. Linia 19. jeżeli stopień mod 2 wykrzyknik znak równości 0 dwukropek. Linia 20. liczbaNieparzystych ← liczbaNieparzystych plus 1. Linia 22. jeżeli liczbaNieparzystych znak równości 0 dwukropek. Linia 23. wypisz cudzysłów Graf zawiera cykl Eulera kropka cudzysłów. Linia 24. w przeciwnym razie dwukropek. Linia 25. wypisz cudzysłów Graf nie zawiera cyklu Eulera kropka cudzysłów.
Polecenie 1

Przeanalizuj działanie programu dla zaprezentowanego grafu.

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

R1MbTs8xXp1kN
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:

0100100101001101010000000101100100001010000101000

Zastanów się, jaki będzie wynik działania programu. Spróbuj odnaleźć w grafie, jeśli jest, cykl Eulera.

Ścieżka Eulera

Przeanalizujmy teraz algorytm sprawdzania, czy w grafie można wyznaczyć ścieżkę Eulera. Jest to taka ścieżkaścieżkaścieżka, która przechodzi przez każdą krawędź grafu dokładnie raz i nie kończy się w wierzchołku, w którym się zaczynała.

Graf, który nie zawiera cyklu Eulera, a jedynie ścieżkę Eulera, nazywamy grafem półeulerowskim. Aby graf można było nazwać półeulerowskim, musi on spełniać warunek zawarty w poniższym twierdzeniu.

o istnieniu grafu półeulerowskiego
Twierdzenie: o istnieniu grafu półeulerowskiego

Graf spójny nazywamy grafem półeulerowskim wtedy i tylko wtedy, gdy zawiera on dokładnie dwa wierzchołki stopnia nieparzystego.

Na tej podstawie wcześniej przedstawiony algorytm można zmodyfikować tak, aby sprawdzał zarówno, czy graf jest eulerowski, jak i półeulerowski.

Specyfikacja problemu:

Dane:

  • macierzSąsiedztwa – macierz sąsiedztwa grafu; tablica tablic liczb naturalnych z przedziału <0, 1>

Wynik:

  • komunikat informujący o tym, czy graf jest eulerowski, półeulerowski lub czy nie jest ani eulerowski, ani półeulerowski

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

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

Macierz sąsiedztwa zaprezentowanego grafu:

0100000110110000010010000100100000110000000000100000010110000010

Ponieważ nie wszystkie wierzchołki grafu są parzystego stopnia, graf nie jest grafem eulerowskim (nie zawiera cyklu Eulera). Natomiast dwa wierzchołki (1 oraz 5) są nieparzystego stopnia, zatem graf jest grafem półeulerowskim – zawiera zatem ścieżkę Eulera.

Ponownie wykorzystamy funkcję stopnieWierzchołkówWGrafie.

Zapiszmy nagłówek funkcji istnienieŚcieżkiEulera, która jako argument przyjmuje macierz sąsiedztwa macierzSąsiedztwa.

W kolejnym kroku tworzymy pustą tablicę stopnieWierzchołków.

Wywołujemy funkcję obliczającą stopnie wierzchołków stopnieWierzchołkówWGrafie. Wynik jej działania zapisujemy w utworzonej tablicy stopnieWierzchołków.

Następnie tworzymy i inicjalizujemy zmienną liczbaNieparzystych wartością 0. Zmienna będzie przechowywać liczbę wierzchołków o stopniu nieparzystym.

Linia 1. funkcja istnienieŚcieżkiEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 4. liczbaNieparzystych ← 0.

Zapisujemy pętlę, która będzie iterować po kolejnych wierzchołkach. Jej zadaniem będzie zliczenie wierzchołków o stopniu nieparzystym.

By to zrobić, zapisujemy instrukcję warunkową. Jeśli warunek jest spełniony, zwiększamy wartość zmiennej liczbaNieparzystych o 1.

Linia 1. funkcja istnienieŚcieżkiEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 2. stopnieWierzchołków ← utwórz pustą tablicę. Linia 3. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 4. liczbaNieparzystych ← 0. Linia 6. dla stopień w stopnieWierzchołków wykonuj dwukropek. Linia 7. jeżeli stopień mod 2 wykrzyknik znak równości 0 dwukropek. Linia 8. liczbaNieparzystych ← liczbaNieparzystych plus 1.

Po zakończeniu pętli zostaje obliczona liczba wierzchołków o stopniu nieparzystym.

Zapisujemy instrukcje warunkowe, za pomocą których sprawdzimy odpowiednie własności grafu. W pierwszej sprawdzamy, czy wartość zmiennej liczbaNieparzystych wynosi 0.

Jeśli tak, oznacza to, że wszystkie wierzchołki mają stopień parzysty, a więc mamy do czynienia z grafem eulerowskim. Wypisujemy odpowiedni komunikat.

Jeśli wartość zmiennej liczbaNieparzystych wynosi 2, oznacza to, że dokładnie dwa wierzchołki mają stopień nieparzysty, co oznacza, że graf zawiera ścieżkę Eulera i jest grafem półeulerowskim. Wypisujemy odpowiedni komunikat.

W przeciwnym razie, gdy żaden z warunków nie jest spełniony, graf nie zawiera ani cyklu Eulera, ani ścieżki Eulera, zatem nie jest ani eulerowski, ani półeulerowski. Wypisujemy odpowiedni komunikat.

Kompletny algorytm:

Linia 1. funkcja stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa przecinek stopnieWierzchołków zamknij nawias okrągły dwukropek. Linia 2. n ← długość otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 3. stopnieWierzchołków ← otwórz nawias kwadratowy 0 zamknij nawias kwadratowy asterysk n. Linia 4. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 5. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek n minus 1 wykonuj dwukropek. Linia 6. jeżeli macierzSąsiedztwa 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. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 8. jeżeli i znak równości j dwukropek. Linia 9. stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy ← stopnieWierzchołków otwórz nawias kwadratowy i zamknij nawias kwadratowy plus 1. Linia 11. zwróć stopnieWierzchołków. Linia 13. funkcja istnienieŚcieżkiEulera otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły dwukropek. Linia 14. stopnieWierzchołków ← utwórz pustą tablicę. Linia 15. stopnieWierzchołków ← stopnieWierzchołkówWGrafie otwórz nawias okrągły macierzSąsiedztwa zamknij nawias okrągły. Linia 16. liczbaNieparzystych ← 0. Linia 18. dla stopień w stopnieWierzchołków wykonuj dwukropek. Linia 19. jeżeli stopień mod 2 wykrzyknik znak równości 0 dwukropek. Linia 20. liczbaNieparzystych ← liczbaNieparzystych plus 1. Linia 22. jeżeli liczbaNieparzystych znak równości 0 dwukropek. Linia 23. wypisz cudzysłów Graf jest eulerowski kropka cudzysłów. Linia 24. w przeciwnym razie jeżli liczbaNieparzystych znak równości 2 dwukropek. Linia 25. wypisz cudzysłów Graf jest półeulerowski kropka cudzysłów. Linia 26. w przeciwnym razie dwukropek. Linia 27. wypisz cudzysłów Graf nie jest ani eulerowski przecinek ani półeulerowski kropka cudzysłów.

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ą 

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ą

ścieżka
ścieżka

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