OBOWIĄZKOWE DO PRZESŁANIA: jedno zadanie
ADT GRAPH implementuje pojęcie grafu z teorii grafów. Graf G=(V,E) składa się ze skończonego zbioru wierzchołków V i skończonego zbioru krawędzi E łączących pary wierzchołków. Grafy (krawędzie) mogą być skierowane lub nieskierowane. Wierzchołki i krawędzie mogą mieć zdefiniowane dodatkowe atrybuty (waga, kolor, etykieta, itp.). Oznaczenia n=|V|, m=|E|.
Typowe operacje dla ADT GRAPH są następujące:
Typowe reprezentacje grafu.
Propozycja interfejsu grafu bez wag z wierzchołkami typu int. Przyjmujemy, że utworzenie grafu oznacza jednocześnie utworzenie wierzchołków. Metoda del_node() usuwa jedynie krawędzie połączone z danym wierzchołkiem.
class Graph { bool directed; // reszta zależy od implementacji public: Graph(int size, bool directed=false); // wierzchołki od 0 do size-1 ~Graph(); Graph(const Graph& other); // copy constructor Graph(Graph&& other); // move constructor Graph& operator=(const Graph& other); // copy assignment operator, return *this Graph& operator=(Graph&& other); // move assignment operator, return *this bool is_directed() const { return directed; } int getV() const; // zwraca liczbę wierzchołków int getE() const; // zwraca liczbę krawędzi bool add_node(int v); // tylko test v bool has_node(int v); // tylko test v void del_node(int v); // usuwa krawędzie połączone z v void add_edge(int u, int v); bool has_edge(int u, int v); void del_edge(int u, int v); void clear(); // usuwa wszystkie krawędzie void visit(int v); // można np. wypisać wierzchołek v void dfs(int v); // v to wierzchołek startowy void bfs(int v); // v to wierzchołek startowy friend std::ostream& operator<<(std::ostream&, const Graph&); }; // Zwykle potrzebne są jeszcze 3 iteratory: // (1) iteracja po wierzchołkach, // (2) iteracja po krawędziach, // (2) iteracja po sąsiadach danego wierzchołka v.
https://www.boost.org/doc/libs/1_72_0/libs/graph/doc/index.html
Zapoznać się z The Boost Graph Library (BGL). Stworzyć przypadkowy graf nieskierowany ważony spójny. Znaleźć minimalne drzewo rozpinające grafu za pomocą algorytmu Prima lub Kruskala.
http://graphblas.org/
Zapoznać się z projektem GraphBLAS, który definiuje API dla algorytmów grafowych.
https://github.com/ufkapano/graphs-dict
Zapoznać się z pakietem graphtheory w języku Python.