Oznaczenie: ,
Mamy .
Macierz sąsiedztwa jest rozmiaru , gdzie oraz
Dla grafów nieskierowanych macierz sąsiedztwa jest symetryczna, zatem możemy przetrzymywać w pamięci tylko jej połowę. Największą zaletą reprezentacji grafy przy pomocy macierzy sąsiedztwa jest możliwość sprawdzenia istnienia krawędzi pomiędzy wybranymi wierzchołkami grafu w złożoności obliczeniowej $O(1)$.\
Minusem takiej reprezentacji jest jej duży rozmiar $O(n^2)$, zatem jeśli w grafie mamy mało krawędzi to większość elementów macierzy to zera i jest to duża strata pamięci.
Dla każdego wierzchołka tworzymy listę, w której przetrzymujemy sąsiadów danego wierzchołka. Rozmiar takiej reprezentacji jest proporcjonalny do liczby krawędzi w grafie (dla grafów skierowanych każda krawędź pojawia się raz, dla nieskierowanych dwa razy).
Wadą listy sąsiedztwa jest złożoność obliczeniowa dostępu do krawędzi grafu, która jest zależna od długości list i w pesymistycznym przypadku może być nawet .
Wybór reprezentacji grafu należy dostosować do kontekstu w jakim grafy będą używane oraz dostępnych informacji na temat wejściowych grafów.
Jeśli grafy będą gęste (liczba krawędzi ) to preferowaną reprezentacją jest macierz sąsiedztwa. Jeśli grafy będą rzadkie to preferowaną reprezentacją może być lista sąsiedztwa.
Przez wielkość grafu rozumiemy , anie tylko liczbę wierzchołków .
Przykładowo: dla grafu pełnego o liczbie wierzchołków mamy . Jeśli zatem algorytm będzie działał w złożoności na tym grafie to będziemy mówili o liniowej złożoności względem wielkości grafu.