Closed kuvshinovdr closed 10 months ago
Задание выполнено, проверьте пожалуйста
Нет нужды передавать длину вектора, если мы сам вектор передаём. Функция подсчёта степени вершины может быть упрощена (и немного исправлена, т.к. index это уже номер из vertex, не надо снова по нему обращаться в vertex) до:
auto get_deg_vertex(Vertex_index index, std::vector<Vertex_index>& vertex, Graph_view const& gv) {
// Get the degree of the vertex
size_t deg=0;
for (auto v: vertex) {
if (gv.are_connected(index, v)) {
deg++;
}
}
return deg;
}
Не следует использовать int для представления длины вектора, поскольку int может иметь (и имеет на моей системе) разрядность меньшую, чем size_t -- целочисленный тип без знака, предназначенный (в C и C++) для представления размеров объектов в памяти. Соответственно, из-за пропажи верхних разрядов при присваивании значения size_t (размер вектора) переменной типа int могут происходить разные неприятности:
auto const len = vertex.size(); // size_t
size_t sum = 0;
Vertex_index center = -1;
В остальном нормально, задача засчитана.
Исправленный код отправлен в вашу ветку, рекомендую посмотреть изменения.
Код добавлен в main.
Создать файл source/is_star.cpp. В нём определить функцию is_star:
Функция принимает заданную итератором vertices последовательность индексов вершин подграфа графа gv и возвращает либо {} (пустой объект optional), если этот подграф не является звездой, или индекс вершины этого подграфа, которая стоит в центре звезды.
Схема работы: для каждой из перечисленных вершин считаем, сколько перечисленных вершин являются её соседями ("степень"). В звезде из n вершин имеем (n-1) вершину со степенью 1 и одну вершину со степенью (n-1), которая и будет центром звезды.