- Подключите библиотеку к файлу CMakeList.txt. Ниже пример подключения библиотеки к проекту с названием ProjectName.
add_subdirectory(GraphLibrary)
target_link_libraries(ProjectName GraphLibrary)- Подключите файл graph.h к тому файлу, в котором вы собираетесь использовать библиотеку. Пример:
#include "graph.h"Для того, чтобы создать граф с вершинами объектов определенного типа, явно укажите его.
Вершинами графа могут быть объекты любого класса с перегруженными операторами <<, <, ==, !=.
В примере ниже будет создан граф объектов типа std::string.
Graph<std::string>a(...);В дальнейшем под вершинами будем понимать объекты типа, граф которого мы создали. Под ребрами будем понимать пары вершин.
Для того, чтобы задать граф матрицей смежности - передайте в конструктор класса Graph:
- первым параметром идентификатор
MatrixType::ADJACENCY - вторым параметром матрицу смежности, определяемую следующими правилами:
- если ребро (i, j) содержится в графе, то в i строке j столбца ставится 1
- в противном случае ставится 0
- третьим параметром вектор всех вершин
Пример входных данных:
Graph<std::string>a(MatrixType::ADJACENCY, {
{0,1,1},
{1,0,1},
{0,1,0}
},
{"a","b","c"});Для того, чтобы задать граф матрицей инцидентности - передайте в конструктор класса Graph:
- первым параметром идентификатор
MatrixType::INCIDENCE - матрицу инцидентности, определяемую следующими правилами:
- каждый столбец определяет ребро
- в случае ребра петли поставьте 2 вершине, его образующей
- в случае неориентированого ребра поставьте 1 вершинам, её образующим
- в случае ориентированного ребра поставьте 1 вершине из которой исходит ребро, -1 вершине, в которую приходит ребро
- третьим параметром вектор всех вершин
Пример входных данных:
Graph<std::string>a(MatrixType::INCIDENCE, {
{ 1, 1, 0, 0},
{-1, 0, 2, 1},
{ 0,-1, 0, 1}
},
{"a","b","c"});Для того, чтобы задать граф множествами вершин и ребер - передайте в конструктор класса Graph:
- первым параметром вектор вершин
- вторым параметром вектор ребер(вектор пар вершин)
Пример входных данных:
Graph<std::string>a({"a", "b", "c"},
{{"a", "b"}, {"a", "c"}, {"b", "b"}, {"b", "c"}, {"c", "b"}});Для того, чтобы задать граф списком смежности - передайте в конструктор класса Graph:
- первым параметром идентификатор
AdjacencyList::LIST - вторым параметром вектор, состоящий из векторов, в которых первый параметр это вершина, а второй параметр это вектор, содержащий смежные вершины
Пример входных данных:
Graph<std::string>a(AdjacencyList::LIST,
{
{"a", {"b","c"}},
{"b", {"b","c"}},
{"c", {"b"}}
});PrintAdjacencyMatrix- выводит матрицу смежности графаPrintIncidenceMatrix- выводит матрицу инцидентности графаPrintSets- выводит множество вершин и ребер графаPrintAdjacencyList- выводит список смежностиRename- заменяет имя вершины передаваемой первым параметром, на имя передаваемое вторым параметром. Не работает с константными экземплярами класса Graph.IsUndirected- проверка графа на неориентированностьCheckLoops- проверка графа на наличие петельVerticesNumber- выводит информацию о количестве вершинEdgesNumber- выводит информацию о количество реберPrintVertexDegree- выводит степень передаваемой вершиныDistance- находит минимальное реберное расстояние от вершины, передаваемой первым параметром, до вершины, передаваемой вторым параметромWeakConnectivityComponents- выводит компоненты слабой связности графаStrongConnectivityComponents- выводит компоненты сильной связности графаMaxClique- находит в графе максимальную кликуSizeClique- находит в графе все клики размера, переданного параметромFindCycles- проверяет граф на наличие цикловFindCyclesSize- находит в графе все циклы размера, переданного параметромEccentricity- находит эксцентриситет вершины, переданной параметромFindDiameter- находит диаметр графаFindRadius- находит радиус графаFindCentralVertices- находит центральные вершины графаIsTree- проверяет является ли граф деревомMaxIndependentSet- находит максимальное независимое множество в графеIndependentSetSize- находит все независимые множества размера, переданного параметромIsBipartite- проверяет граф на двудольностьOptimalColoring- находит оптимальную раскраску графаIsEulerGraph- проверяет граф на эйлеровостьIsHamiltonGraph- проверяет граф на гамильтоновость