Algorytmy matematyki dyskretnej
Laboratorium 02 – Metody reprezentacji grafów
Napisz klasę ListGraph reprezentującą graf w postaci list sąsiedztwa. Klasa powinna wspierać zarówno grafy skierowane jak i nieskierowane, udostępniając następujące funkcje:
• konstruktor – tworzy graf zadanego typu o zadanej liczbie wierzchołków
• addEdge – dodaje krawędź
• containsEdge – sprawdza, czy graf zawiera krawędź
• getOutEdges – zwraca listę krawędzi o początku w danym wierzchołku
• outDegree – zwraca liczbę krawędzi o początku w danym wierzchołku
• getEdgesCount – zwraca liczbę krawędzi w grafie
• getInEdges – zwraca listę krawędzi o końcu w danym wierzchołku
• inDegree – zwraca liczbę krawędzi o końcu w danym wierzchołku
Dla grafu nieskierowanego metody należy interpretować w następujący sposób:
• outDegree i inDegree zwracają stopień wierzchołka w grafie
• jeżeli graf zawiera krawędź uv, to getOutEdges(u) zawiera krawędź u->v (skierowaną), getOutEdges(v) zawiera krawędź v->u, getInEdges(u) zawiera krawędź v->u oraz
getInEdges(v) zawiera krawędź u->v, containsEdge(u->v) i containsEdge(v->u) zwraca true
• addEdge(u->v) dodaje krawędź uv (nieskierowaną)
Punktacja:
• Poprawne działanie funkcji dla grafu skierowanego
◦ konstruktor, addEdge, containsEdge – 2p
◦ getOutEdges, outDegree, getEdgesCount – 1p
◦ getInEdges, inDegree – 1p
• Poprawne działanie wszystkich funkcji dla grafu nieskierowanego – 1p Etap 2 i 3 można wykonać w dowolnej kolejności