Struktura grafu

GrafgrafGraf jest strukturą składającą się z obiektów (wierzchołkówwierzchołekwierzchołków) oraz z powiązań między nimi (krawędzikrawędźkrawędzi). Zazwyczaj przedstawiany jest w formie diagramu jako zbiór punktów połączonych odcinkami, gdzie punkty przedstawiają wierzchołki, a odcinki – krawędzie grafu.

RSxiPQWNTHTjy
Ilustracja interaktywna przedstawia graf o połączeniach: 7, 3. 3, 2. 3, 1. 1, 4. 1, 5. 1, 6. 1, 0. 1. Wierzchołek oznaczony jako "3", 2. Krawędź łącząca wierzchołki "3" i "1", 3. Sąsiad wierzchołka "1".
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Wierzchołki i krawędzie

Podczas implementacji potrzebna jest możliwość rozróżnienia wierzchołków. Osiągnąć to można, na przykład oznaczając poszczególne wierzchołki kolejnymi liczbami naturalnymi, zaczynając od 0. Przechowywać je będziemy za pomocą listy.

Warto zaznaczyć, że wierzchołki mogą być reprezentowane również za pomocą liter (taki przypadek zaprezentowano w Ćwiczeniu 1 na dole tej sekcji).

Linia 1. wierzcholki znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.

Podobnie w przypadku krawędzi:

Linia 1. krawedzie znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.

Listy są parametrami klasy Graf. Klasa ta ma z kolei dwa pola – listę wierzchołków grafu oraz listę jego krawędzi. Domyślnymi parametrami konstruktora tej klasy będą puste listy:

Linia 1. class Graf dwukropek. Linia 2. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek wierzcholki znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek krawedzie znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły dwukropek. Linia 3. self kropka wierzcholki znak równości wierzcholki. Linia 4. self kropka krawedzie znak równości krawedzie.

Wierzchołki grafu reprezentowane będą liczbami naturalnymi.

Utworzony w ten sposób obiekt graf klasy Graf ma trzy różne wierzchołki oznaczone numerami 0, 1 oraz 2, jednak nie ma żadnych krawędzi:

Linia 1. graf znak równości Graf otwórz nawias okrągły otwórz nawias kwadratowy 0 przecinek 1 przecinek 2 zamknij nawias kwadratowy zamknij nawias okrągły.

By wyświetlić wierzchołki obiektu graf klasy Graf, wykorzystamy polecenie print:

Linia 1. print otwórz nawias okrągły graf kropka wierzcholki zamknij nawias okrągły.

Każda krawędź reprezentowana jest przez dwuelementową listę zawierającą numery wierzchołków, które łączy.

Dodajmy do utworzonego obiektu krawędzie łączące wierzchołki:

Linia 1. graf znak równości Graf otwórz nawias okrągły otwórz nawias kwadratowy 0 przecinek 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy otwórz nawias kwadratowy 0 przecinek 1 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 0 przecinek 2 zamknij nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły.

Graf opisany za pomocą poniższej klasy:

Linia 1. graf znak równości Graf otwórz nawias okrągły otwórz nawias kwadratowy 7 przecinek 5 przecinek 4 przecinek 5 przecinek 1 przecinek 2 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy otwórz nawias kwadratowy 7 przecinek 5 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 4 przecinek 6 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 1 przecinek 2 zamknij nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły.

wyglądałby następująco:

R1aqQvQ1QyMEI
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Polecenie 1

Jak nazywamy graf, którego nie wszystkie wierzchołki połączone są ze sobą krawędziami?

Przykład

W jaki sposób moglibyśmy za pomocą kodu zaprezentować graf zamieszczony na początku tej sekcji?

Zacznijmy od wierzchołków.

Linia 1. graf znak równości Graf otwórz nawias okrągły otwórz nawias kwadratowy 7 przecinek 2 przecinek 3 przecinek 1 przecinek 4 przecinek 5 przecinek 6 przecinek 0 zamknij nawias kwadratowy zamknij nawias okrągły.

Mamy do czynienia z grafem spójnym, więc jego wierzchołki połączone są krawędziami.

Linia 1. graf znak równości Graf otwórz nawias okrągły otwórz nawias kwadratowy 7 przecinek 2 przecinek 3 przecinek 1 przecinek 4 przecinek 5 przecinek 6 przecinek 0 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy otwórz nawias kwadratowy 7 przecinek 3 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 2 przecinek 3 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 3 przecinek 1 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 4 przecinek 1 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 5 przecinek 1 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 6 przecinek 1 zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy 0 przecinek 1 zamknij nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły.
Ćwiczenie 1

Dany jest graf G.

RdcdsO5lgdokK
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
RP7mshv0CoMuW
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.

Słownik

droga
droga

ciąg wierzchołków, w którym wszystkie wyrazy (z wyjątkiem pierwszego i ostatniego, które mogą być równe) są różne

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

graf spójny
graf spójny

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

izomorfizm
izomorfizm

właściwość grafów polegająca na tym, że liczba krawędzi łączących dane dwa wierzchołki jednego grafu jest równa liczbie krawędzi łączących odpowiadające im wierzchołki drugiego grafu; jeśli graf  jest izomorficzny z grafem , to gdy jakieś dwa wierzchołki są połączone krawędzią w jednym z grafów, odpowiadające im wierzchołki w drugim grafie również łączy krawędź; izomorfizm grafów zachowuje takie własności jak: liczba wierzchołków, liczba krawędzi, stopnie wierzchołków, czy spójność grafu

klasa generyczna
klasa generyczna

klasa w języku Java pozwalająca stworzyć ogólną, uniwersalną klasę, która będzie wykonywała działania z różnymi typami danych, umożliwiając ponowne użycie kodu bez konieczności redefiniowania klasy dla każdego typu

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ą)

para nieuporządkowana
para nieuporządkowana

zbiór złożony jedynie z dwóch różnych elementów: {a,b}

stopień wierzchołka
stopień wierzchołka

liczba krawędzi incydentnych z danym wierzchołkiem

wierzchołek
wierzchołek

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